Java: Řazení
Z MiS
(Rozdíly mezi verzemi)
m (→Související stránky: Přidán odkaz na stránku Java: Kontejnery) |
m (Oprava porovnání desetinných čísel u Comparatoru.) |
||
| Řádka 54: | Řádka 54: | ||
class AutoComparatorSpotreba implements Comparator<Auto> { | class AutoComparatorSpotreba implements Comparator<Auto> { | ||
public int compare(Auto a1, Auto a2) { | public int compare(Auto a1, Auto a2) { | ||
| − | + | if (a1 < a2) return -1; | |
| + | if (a1 > a2) return 1; | ||
| + | return 0; | ||
} | } | ||
} | } | ||
Verze z 13. 11. 2017, 08:00
Řadícími algoritmy, jejich principem a vlastnostmi se zabývá stránka Řadící algoritmy.
Pro třídy s přirozeným řazením
- Pokud je přirozené porovnávat instance třídy a je zřejmé, podle jakého kritéria porovnání probíhá (například srovnání čísel), pak u třídy implementujeme rozhraní:
Comparable<Trida> - Rozhraní vyžaduje jedinou metodu:
int compareTo(druha Trida) - Metoda vrací:
- kladné číslo, když je tato instance „větší“ než druhá,
- záporné číslo, když je menší než druhá
- a 0 když jsou obě instance „stejné“.
Příklad:
public class Mince implements Comparable<Mince> {
private int hodnota;
public int compareTo(Mince druhaMince) {
return this.hodnota - druhaMince.hodnota;
}
}
- Použití:
ArrayList<Mince> mince = new Array... Collections.sort(mince);
Některé třídy Javy už mají rozhraní Comparable implementované. Pak je můžeme řadit přímo: Collections.sort(cisla);.
Příkladem takové třídy jsou objektové číselné typy jako Integer.
Pro třídy, kde je více možných kritérií řazení
- Pokud můžeme porovnávat podle více kritérií, vytvoříme samostatné třídy „komparátory“.
- Implementují rozhraní:
Comparator<Trida>
Příklad:
public class Auto {
private int cena;
private double spotreba;
private String nazev;
public int getCena() { return this.cena; }
public double getSpotreba() {
return this.spotreba;
}
public String getNazev() { return this.nazev; }
}
class AutoComparatorCena implements Comparator<Auto> {
public int compare(Auto a1, Auto a2) {
return a1.getCena() - a2.getCena();
}
}
class AutoComparatorSpotreba implements Comparator<Auto> {
public int compare(Auto a1, Auto a2) {
if (a1 < a2) return -1;
if (a1 > a2) return 1;
return 0;
}
}
class AutoComparatorNazev implements Comparator<Auto> {
public int compare(Auto a1, Auto a2) {
return a1.getNazev().compareTo(a2.getNazev());
}
}
- Použití:
Collections.sort(auta, new AutoHmotnostComparator());
- Lze vytvořit také anonymní třídu pro porovnání (komparátor):
Collections.sort(
auta,
new Comparator<Auto>() {
public int compare(Auto a1, Auto a2) {
return ...
}
});