Java Academy · Lektion

Comparable kontra Comparator

Lär er skillnaden mellan Comparable och Comparator för anpassad sortering. Öva på compareTo och externa Comparators.

Lektion 2 av 38 steg

Comparable kontra Comparator är en gratis lektion i Java Academy på CoddyKit. Detta är lektion 2 av 3. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Java Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Java Academy innehåller totalt 3 lektioner.

Introduktion

Sortering kräver regler. Comparable och Comparator är två sätt att definiera dem:

  • Comparable: klassen implementerar compareTo.
  • Comparator: ett separat objekt som skickas till sort().

Comparable-konceptet

Comparable låter en klass definiera sin naturliga ordning. Implementera compareTo så att Collections.sort vet hur elementen ska ordnas.

Kod: Comparable

Här implementerar Person Comparable och objekt sorteras efter ålder. Det definierar den naturliga ordningen.

public class Main {
  static class Person implements Comparable<Person> {
    String name;
    int age;
    Person(String n, int a) { name = n; age = a; }
    public int compareTo(Person o) {
      return this.age - o.age; // order by age
    }
    public String toString() { return name + "(" + age + ")"; }
  }
  public static void main(String[] args) {
    java.util.List<Person> list = new java.util.ArrayList<>();
    list.add(new Person("Ada",30));
    list.add(new Person("Bob",25));
    java.util.Collections.sort(list);
    System.out.println(list); // [Bob(25), Ada(30)]
  }
}

Comparator-konceptet

Comparator är extern. Samma klass kan sorteras på olika sätt, till exempel efter namn i stället för ålder.

Kod: Comparator

Denna Comparator sorterar efter name. Olika Comparators kan återanvändas för samma klass.

public class Main {
  static class Person {
    String name; int age;
    Person(String n,int a){ name=n; age=a; }
    public String toString(){ return name+"("+age+")"; }
  }
  public static void main(String[] args) {
    java.util.List<Person> list = new java.util.ArrayList<>();
    list.add(new Person("Ada",30));
    list.add(new Person("Bob",25));

    java.util.Comparator<Person> byName = (p1,p2) -> p1.name.compareTo(p2.name);
    java.util.Collections.sort(list, byName);
    System.out.println(list); // [Ada(30), Bob(25)]
  }
}

Kod: omvänd Comparator

Comparators kan definiera vilken regel som helst, till exempel fallande ordning som här.

public class Main {
  public static void main(String[] args) {
    java.util.List<Integer> nums = new java.util.ArrayList<>();
    nums.add(5); nums.add(1); nums.add(3);

    java.util.Comparator<Integer> desc = (a,b) -> b - a;
    java.util.Collections.sort(nums, desc);
    System.out.println(nums); // [5,3,1]
  }
}

Kontroll av Comparable kontra Comparator

Snabb kontroll: Vad är den huvudsakliga skillnaden mellan Comparable och Comparator?

Sammanfattning

Sammanfattning: Comparable definierar en naturlig ordning inuti klassen. Comparator är separat och kan skapa flera sorteringsstrategier.

Gratis att börja

Lär dig Java med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
104
Lektioner
374

Vanliga frågor

Är lektionen ”Comparable kontra Comparator” gratis?

Ja – hela texten till ”Comparable kontra Comparator” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Java Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i Java Academy innehåller totalt 3 lektioner.

Vad lär jag mig i ”Comparable kontra Comparator”?

Lär er skillnaden mellan Comparable och Comparator för anpassad sortering. Öva på compareTo och externa Comparators. Ni övar på Java Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Java Academy?

Du behöver inga förkunskaper. Utbildningen i Java Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 3.

Hur lång tid tar lektionen ”Comparable kontra Comparator”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Java Academy-lektionen?

Ja. Varje Java Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Maps och frekvensräkning
  2. Comparable kontra Comparator
  3. Sortering/sökning med Collections
← Tillbaka till Java Academy