01: import java.util.*; 02: 03: public class Komparatory { 04: public static void main(String[] args) { 05: new Komparatory(); 06: } 07: 08: Komparatory() { 09: List<Osoba> lista = new ArrayList<Osoba>(); 10: lista.add(new Osoba("Kasia",1980,165)); 11: lista.add(new Osoba("Basia",1986,171)); 12: lista.add(new Osoba("Kasia",1980,168)); 13: lista.add(new Osoba("Hania",1980,171)); 14: lista.add(new Osoba("Magda",1980,171)); 15: lista.add(new Osoba("Kasia",1980,169)); 16: lista.add(new Osoba("Basia",1979,171)); 17: lista.add(new Osoba("Gosia",1975,171)); 18: 19: Collections.sort(lista); 20: piszListe(lista, "Naturalny: imie, wiek, wzrost"); 21: Collections.sort(lista, new Comp1()); 22: piszListe(lista, "Comp1: wzrost, wiek, imie"); 23: Collections.sort(lista, new Comp2()); 24: piszListe(lista, "Comp2: wiek, imie, wzrost"); 25: } 26: 27: static void piszListe(List lista, String naglowek) { 28: System.out.println(naglowek); 29: for (int i = 0; i < lista.size(); i++) 30: System.out.println(lista.get(i)); 31: } 32: } 33: 34: class Osoba implements Comparable<Osoba> { 35: String imie; 36: int rok_ur; 37: int wzrost; 38: 39: Osoba(String i, int r, int w) { 40: imie = i; 41: rok_ur = r; 42: wzrost = w; 43: } 44: 45: /** 46: * Porzadek naturalny: 47: * wedlug imienia, potem wieku, potem wzrostu 48: */ 49: public int compareTo(Osoba o) { 50: int k = imie.compareTo(o.imie); 51: if ( k != 0 ) return k; 52: k = o.rok_ur - rok_ur; 53: if ( k != 0 ) return k; 54: return wzrost - o.wzrost; 55: } 56: 57: public String toString() { 58: return imie + ", " + (2003-rok_ur) + 59: " lat, " + wzrost + " cm. wzrostu"; 60: } 61: } 62: 63: /** 64: * Komparator 1: 65: * wedlug wzrostu, potem wieku, potem imienia 66: */ 67: class Comp1 implements Comparator<Osoba> { 68: public int compare(Osoba o1, Osoba o2) { 69: int k = o1.wzrost - o2.wzrost; 70: if ( k != 0 ) return k; 71: k = o2.rok_ur - o1.rok_ur; 72: if ( k != 0 ) return k; 73: return o1.imie.compareTo(o2.imie); 74: } 75: } 76: 77: /** 78: * Komparator 2: 79: * wedlug wieku, potem imienia, potem wzrostu 80: */ 81: class Comp2 implements Comparator<Osoba> { 82: public int compare(Osoba o1, Osoba o2) { 83: int k = o2.rok_ur - o1.rok_ur; 84: if ( k != 0 ) return k; 85: k = o1.imie.compareTo(o2.imie); 86: if ( k != 0 ) return k; 87: return o1.wzrost-o2.wzrost; 88: } 89: }