2012-10-23 11 views
5

द्वारा ArrayList में सॉर्ट सेट्स मैंने उन सभी सेटों को एक सूची में डालकर ऐसा करने का विचार किया जो कि मानचित्र में होगा, जहां कुंजी आकार है। मुझे अधिकतम आकार पता है कि एक सेट (मुझे दिया जा सकता है), इसलिए मैं केवल 0 और उस संख्या के बीच फिर से शुरू कर सकता हूं, प्रत्येक सूची प्राप्त कर सकता हूं और फिर प्रत्येक सूची के माध्यम से फिर से भर सकता हूं और प्रत्येक सेट को सरणी सूची में डाल सकता हूं।आकार

हालांकि, यह भयानक रूप से घबराहट लगता है - क्या ऐसा करने का एक बेहतर तरीका है? क्या कोई तरीका है कि मैं आकार के आधार पर तुलनित्र कार्य कर सकता हूं?

धन्यवाद

उत्तर

8

आपको लगता है कि के लिए एक Comparator प्रदान कर सकते हैं। और प्रयोग 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); 

आउटपुट:

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

हम्म तो बात यह है कि मैं कर रहा हूँ छँटाई वास्तव में एक वस्तु है कि एक निजी वर्ग के रूप में कार्यान्वित किया जाता है - इस पद्धति अभी भी लागू होता है? – praks5432

+0

@ praks5432 कुछ और कोड जोड़ा गया है, इसलिए यह समझने के लिए आपके लिए आसान होगा :) –

+0

इस कार्यान्वयन से सावधान रहें। मुझे संदेह है कि एक ही आकार को वापस करना एक 'ट्रीसेट <> # जोड़() 'के परिणामस्वरूप वस्तुओं को वही माना जाएगा और गिरा दिया जाएगा। –

2

अन्य (पूरी तरह से वैध) जवाब के अलावा, मैं सिर्फ आपको बताएंगे कि आप स्पष्ट रूप से एक नया वर्ग को परिभाषित करने की जरूरत नहीं है आप बस गुमनाम रूप से एक बना सकते हैं:,

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

अगर आप इस तरह के एक तुलनित्र कई बार उपयोग करने की योजना है, तो मैं यह स्पष्ट रूप से परिभाषित करने पर विचार करेंगे।


प्रासंगिक javadocs:

संबंधित मुद्दे