2012-10-23 19 views
5

Pomyślałem o zrobieniu tego poprzez umieszczenie wszystkich zestawów na liście, która byłaby wtedy na mapie, gdzie klucz jest wielkością. Znam maksymalny rozmiar zestawu (dany mi), więc mogę po prostu dokonać iteracji między 0 i tą liczbą, pobrać każdą listę, a następnie powtórzyć każdą listę i umieścić każdy zestaw na liście.Sortowanie w ArrayList według rozmiaru

Jednak wydaje się to przerażająco przylegające - czy jest lepszy sposób na zrobienie tego? Czy istnieje sposób, w jaki mogę wykonać funkcję komparatora na podstawie rozmiaru?

Dzięki

Odpowiedz

8

Możesz podać Comparator do tego. i używać Collections.sort()

class SizeComarator implements Comparator<Set<?>> { 

    @Override 
    public int compare(Set<?> o1, Set<?> o2) { 
     return Integer.valueOf(o1.size()).compareTo(o2.size()); 
    } 
} 

    ArrayList<Set<String>> arrayList = new ArrayList<Set<String>>(); 
    Set<String> set1 = new HashSet<String>(); 
    set1.add("A"); 
    set1.add("B"); 
    Set<String> set2 = new HashSet<String>(); 
    set2.add("A"); 
    arrayList.add(set1); 
    arrayList.add(set2); 
    Collections.sort(arrayList, new SizeComarator()); 
    System.out.println(arrayList); 

wyjściowa:

[[A], [A, B]] 
+0

hmm więc rzeczą, że jestem naprawdę sortowania jest obiektem, który jest zaimplementowany jako prywatny klasy - ma nadal zastosowanie tej metody? – praks5432

+0

@ praks5432 Dodano trochę kodu, więc będzie to łatwe do zrozumienia :) –

+0

Uważaj na tę implementację. Podejrzewam, że zwracając ten sam rozmiar do np. a 'TreeSet <> # add()' spowoduje, że elementy zostaną uznane za takie same i zostaną odrzucone. –

2

W uzupełnieniu do innych (doskonale prawidłowy) odpowiedzi, po prostu podkreślić, że nie trzeba jawnie zdefiniować nowe klasy, można po prostu stworzyć anonimowo:

Collections.sort(myList, new Comparator<Set<?>>() { 
    @Override 
    public int compare(Set<?> o1, Set<?> o2) { 
     return Integer.valueOf(o1.size()).compareTo(o2.size()); 
    } 
}); 

couse, jeśli planujesz używać takich komparatora wielokrotnie, wtedy uważam definiowania go wyraźnie.


Istotne Javadocs:

Powiązane problemy