Java: Řazení
Z MiS
(Rozdíly mezi verzemi)
(Vytvoření stránky) |
(Odkaz na související, poznámka, že některé třídy mají Comparable implementované) |
||
Řádka 1: | Řádka 1: | ||
[[Category:VSE]][[Category:Informatika]][[Category:Programování]][[Category:Java]] | [[Category:VSE]][[Category:Informatika]][[Category:Programování]][[Category:Java]] | ||
+ | |||
+ | <div class="Poznamka">Řadícími algoritmy, jejich principem a vlastnostmi se zabývá stránka [[Řadící algoritmy]].</div> | ||
+ | |||
== Pro třídy s přirozeným řazením == | == Pro třídy s přirozeným řazením == | ||
Řádka 20: | Řádka 23: | ||
ArrayList<Mince> mince = new Array... | ArrayList<Mince> mince = new Array... | ||
Collections.sort(mince); | Collections.sort(mince); | ||
+ | |||
+ | <div class="Poznamka"> | ||
+ | Některé třídy Javy už mají rozhraní <code>Comparable</code> implementované. Pak je můžeme řadit přímo: <code>Collections.sort(cisla);</code>. | ||
+ | |||
+ | Příkladem takové třídy jsou objektové číselné typy jako <code>Integer</code>. | ||
+ | </div> | ||
== Pro třídy, kde je více možných kritérií řazení == | == Pro třídy, kde je více možných kritérií řazení == | ||
Řádka 51: | Řádka 60: | ||
* Lze vytvořit také anonymní třídu pro porovnání (komparátor): | * 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 ... } } ); | Collections.sort(auta, new Comparator<Auto>() { public int compare(Auto a1, Auto a2) { return ... } } ); | ||
+ | |||
+ | |||
+ | == Související stránky == | ||
+ | * [[Řadící algoritmy]] |
Verze z 9. 12. 2014, 10:12
Ř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) { return Math.truncate(a1.getSpotreba() - a2.getSpotreba()); } }
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 ... } } );