V třídě Collections se nacházejí užitečné statické metody pro páci s třídami typu Set, List, Map a třídami od nich odvozenými.
příklad
List<String> src = new ArrayList<String>();
src.add("a"); src.add("b"); src.add("c");
List<String> dst = new ArrayList<String>();
dst.add("e"); dst.add("f"); dst.add("g");
Collections.copy(dst,src);
System.out.println(dst.toString()); // [a, b, c]
T max(Collection<? extends T> coll)
T max(Collection<? extends T> coll, Comparator<? super T> comp)
void reverse(List<?> list)
void sort(List<T> list)
void sort(List<T> list, Comparator<? super T> c)
Pro porovnávání dvou prvků a zároveň i definici jejich pořadí v seznamech lze v Javě použít dva přístupy.
Comparable objekt je schopen porovnat sám sebe s jiným objektem. Takovýto objekt musí implementovat Comparable interface. Konkrétně musí definovat metodu int compareTo(Object obj) - ta porovná daný objekt s objektem obj a vrátí <0, 0 nebo >0 podle toho, jetli je daný objekt menší, roven nebo větší než obj. Implmentací metody compareTo definujeme přirozené uspořádání objektů.
Comparator je objekt který umožňuje porovnat dva různé objekty. Při jeho implementaci je potřeba přepsat jedinou metodu - int compare(T o1, T o2) a to tak, že vrací <0, 0 nebo >0 podle toho, jestli objekt o1 je menší, roven nebo větší než objekt o2.
příklad třídy implementující Comparable
public class Employee implements Comparable<Employee> {
private int empId;
private String name;
private int age;
/** Porovnani podle cisla zamestnance */
public int compareTo(Employee o) {
return this.empId - o.empId ;
}
...
}
příklad Comparatoru
public class EmpSortByNameComparator implements Comparator<Employee>{
/** Porovna jmena zamestnancu - String implementuje Comparable, proto lze pouzit compareTo() */
public int compare(Employee o1, Employee o2) {
return o1.getName().compareTo(o2.getName());
}
}
použití:
List<Employee> employees = new ArrayList<Employee>();
employees.add(new Employee(4, "Tomáš", 28));
employees.add(new Employee(1, "Zdeněk", 19));
employees.add(new Employee(2, "Bořek", 34));
employees.add(new Employee(3, "Adam", 40));
Collections.sort(employees); // natural ordering
System.out.println(employees);
Collections.sort(employees, new EmpSortByNameComparator()); // defined ordering
System.out.println(employees);
Teď si některé z těchto věcí vyzkoušíte sami. Vaším úkolem bude napsat funkce vyhledávající a třídící automobily v jednoduché databázi.
Stáhněte si připravený projekt, naimportujte si ho do Vašeho IDE a doplňte těla metod ve třídě CarsDatabase. Při implementaci se soustřeďte primárně na efektivitu při volání metod get…().