2012-10-23 29 views
5

Bunu yaptıktan sonra, tüm kümeleri bir haritaya yerleştirip, anahtarın boyutta olduğu bir listeye yerleştirmeyi düşündüm. Bir kümenin (bana verilen) olabileceği maksimum boyutu biliyorum, böylece sadece 0 ile bu sayı arasında yineleyebilir, her listeyi alabilir ve sonra her listeden yineleyebilir ve her seti bir arraylist'e yerleştirebilirim. Bununla birlikte, bu korkunç bir şekilde tıkanıklık gibi görünüyor - bunu yapmanın daha iyi bir yolu var mıdır? Boyutu temel alan bir karşılaştırma işlevi yapabileceğimin bir yolu var mı?ArrayList'deki Setleri Boyutlara Göre Sırala

Teşekkür

cevap

8

Bunun için bir Comparator sağlayabilir. ve kullanımı 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); 

Çıktı:

diğer (tamamen geçerli) cevap ek olarak, Sadece, açıkça yeni bir sınıf tanımlamak için sana ihtiyacım yok işaret edeceğiz
[[A], [A, B]] 
+0

hmm - bu yöntem hala geçerli? – praks5432

+0

@ praks5432 Biraz daha kod eklendi, böylece anlamanız kolay olacak :) –

+0

Bu uygulamaya dikkat edin. Aynı boyutta döndürmenin, örn. "TreeSet <> # add()" öğesi, aynı ve düşünülen öğelere neden olur. –

2

sadece anonim bir tane oluşturabilirsiniz: Eğer böyle bir karşılaştırma birden çok kez kullanmayı planlıyorsanız eğer, danışmanın

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

, o zaman ben açıkça tanımlayan ele alacak.


İlgili Javadocs: Ben ayırıyorum şey gerçekten özel sınıf olarak uygulanan bir nesnedir, böylece