2011-01-14 16 views
5
import java.util.*; 
public class DuplicateCheckMain { 
public static void main(String[] gopal){ 
    Integer[] args = {6,9,2,55,100,1,6,8,9}; 
    Integer[] args1 = {3,6,2,3,5}; 
    Set S = new HashSet(); 
    DuplicateCheck.checkDuplicate(S,args,new String("HashSet")); 
    Set S1 = new HashSet(); 
    DuplicateCheck.checkDuplicate(S1,args1,new String("HashSet")); 

    S = new TreeSet(); 
    DuplicateCheck.checkDuplicate(S,args,new String("TreeSet")); 

    S = new LinkedHashSet(); 
    DuplicateCheck.checkDuplicate(S,args,new String("LinkedHashSet")); 

} 
} 

public class DuplicateCheck { 

public static void checkDuplicate(Set S, Integer[] args, String setname){ 
    for(int i = 0;i<args.length;i++){ 
    if(!S.add(args[i])){System.out.println("Duplicate element "+args[i]);} 
    } 
    System.out.println(S +" "+ setname); 
} 
} 

प्रश्न: संदर्भ एस के साथ HashSet के लिए, HashSet पृथक नहीं किया जा रहा है। लेकिन संदर्भ एस 1 के लिए, हैशसेट को क्रमबद्ध किया गया है। ऐसा क्यों?हैशसेट ने गारेनटे सॉर्टिंग नहीं किया है?

+0

कृपया कोड टैग का उपयोग करें। यह और अधिक पठनीय होगा! –

+0

क्या आप आउटपुट प्रदान कर सकते हैं? –

+0

आउटपुट: डुप्लिकेट तत्व 6 डुप्लिकेट तत्व 9 [1, 100, 2, 55, 6, 8, 9] HashSet डुप्लिकेट तत्व 3 [2, 3, 5, 6] HashSet डुप्लिकेट तत्व 6 डुप्लिकेट तत्व 9 [1, 2, 6, 8, 9, 55, 100] ट्रीसेट डुप्लिकेट तत्व 6 डुप्लिकेट तत्व 9 [6, 9, 2, 55, 100, 1, 8] लिंक्ड हैशसेट – Gopal

उत्तर

5

HashSetबिल्कुल क्रमबद्ध करने की गारंटी नहीं है। आदेश पर सभी पर गारंटी नहीं है।

iterator() विधि के प्रलेखन से:

इस सेट में तत्वों पर एक iterator देता है। तत्व किसी विशेष क्रम में वापस नहीं आते हैं।

HashSet समानता के अनुसार तत्वों की उपस्थिति को सम्मिलित करने और जांचने के लिए डिज़ाइन किया गया है। बस इतना ही।

यदि आपको सॉर्टिंग की आवश्यकता है, तो आपको , TreeSet या ConcurrentSkipListSet जैसे कार्यान्वयन का उपयोग करना चाहिए।

3

HashSet एक बाल्टी प्रविष्टि

args1 सरणी सभी संख्या में में नंबर स्टोर करने के लिए एक आधुनिक उपयोग किया जाता है से कम 16 - डिफ़ॉल्ट HashSet आकार। यही कारण है कि यह क्रमबद्ध किया जा रहा है।

+0

यदि ऐसा है, तो यह मुख्य रूप से कमांड लाइन इनपुट के दौरान क्यों नहीं चलता है? प्रदान की गई सरणी संख्या 16. से कम – Gopal

+0

@gopal कृपया "मुख्य पर कमांड लाइन इनपुट" कोड पोस्ट करें ... जैसा कि अन्य उत्तरों बताते हैं, 'हैशसेट' ** ** गारंटी सॉर्टिंग की गारंटी नहीं देता है। कभी नहीँ। मैं बस समझा रहा था कि क्यों 'args1' स्थिति में यह हल किया गया था। –

0

HashSet छँटाई गारंटी नहीं है। सॉर्टिंग सुविधा के लिए, TreeSet या कुछ इसी तरह का उपयोग करें।

0

java.util.Set की गारंटी देता है "कोई डुप्लिकेट तत्वों"।

java.util.SortedSet गारंटी आदेश और "कोई डुप्लिकेट तत्वों"।

3

कृपया ध्यान दें कि guarantying छँटाई नहीं परे, HashSet रों यात्रा के क्रम पूरी तरह से बदल सकता है अगर आप नए तत्व सम्मिलित करें। उदाहरण के लिए:

[1, 100, 2, 55, 6, 8, 9] 
[1, 100, 2, 3, 55, 66, 6, 37, 7, 8, 9, 13] 
[1, 2, 100, 3, 6, 66, 7, 37, 8, 42, 9, 13, 55] 

सूचना कैसे एक भी तत्व की प्रविष्टि पूरी तरह से क्रम बदल:

public class TestHashSet { 
    public static void main(String[] foo) { 
     Set<Integer> set = new HashSet<Integer>(); 
     set.addAll(Arrays.asList(new Integer[] {6,9,2,55,100,1,6,8,9})); 
     System.out.println(set); 
     set.addAll(Arrays.asList(new Integer[] {7,3,13,37,66})); 
     System.out.println(set); 
     set.add(42); 
     System.out.println(set); 
    } 
} 

मेरा पीछा उत्पादन दी।

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