Oktatás * Programozás 2 * Szkriptnyelvek * levelezősök Félévek Linkek * kalendárium |
Java /
saját objektumok rendezése a Comparable interfésszelObjektumok rendezésére két módszer is van: 1) Comparable interfész implementálása, ill. 2) Comparator használata. Most a Comparable interfészt nézzük meg. Ez akkor használatos, amikor az objektumainkon értelmezett egy természetes rendezés. Ez azt jelenti, hogy az objektumainkat egyféleképpen akarjuk rendezni. Például vegyük a Kör osztályt. Ha köröket akarunk rendezni, akkor lehetne kerület, terület, sugár, ill. átmérő szerint is rendezni, de a kör mérete csupán a sugártól függ. A kerületet, területet, átmérőt a sugár határozza meg. Vagyis ha köröket akarunk rendezni, akkor magától adódik, hogy a sugár alapján érdemes őket rendezni. Ha vesszük személyek egy listáját, akkor azt többféleképpen is lehet rendezni: családnév szerint, születési dátum szerint, testmagasság szerint, stb. Ebben az esetben a Comparator használata a szerencsésebb. Nézzük akkor a körök rendezését: import java.util.ArrayList; import java.util.Collections; import java.util.List; class Circle implements Comparable<Circle> { private double r; public Circle (double r){ this.r = r; } public double getR() { return this.r; } public Circle() { this.r = 1.0; } public double kerulet(){ return 2 * this.r * Math.PI; } public double terulet(){ return r * r * Math.PI; } @Override public String toString() { return String.format("Circle(r=%.2f)", this.r); } @Override public int compareTo(Circle other) { return (int) Math.signum(this.getR() - other.getR()); } } public class Proba { public static void main(String[] args) { Proba m = new Proba(); m.start(); } private void start() { Circle c1 = new Circle(); Circle c2 = new Circle(2.0); Circle c3 = new Circle(3.5); Circle c4 = new Circle(7.2); List<Circle> li = new ArrayList<>(); li.add(c3); li.add(c1); li.add(c4); li.add(c2); System.out.println("Nincs rendezve:"); System.out.println(li); System.out.println(); System.out.println("Rendezve:"); Collections.sort(li); // ennyi, automatikusan a compareTo függvényt használja System.out.println(li); } } Kimenet: Nincs rendezve: [Circle(r=3.50), Circle(r=1.00), Circle(r=7.20), Circle(r=2.00)] Rendezve: [Circle(r=1.00), Circle(r=2.00), Circle(r=3.50), Circle(r=7.20)] Az osztályunknak implementálnia kell a
A példában ha a sugár egy |
Blogjaim, hobbi projektjeim * The Ubuntu Incident [ edit ] |