2013-12-12 11 views
10

मैं मेरा प्रश्न यहाँहैश मैप डुप्लिकेट की अनुमति देता है?

है मैं इस तरह लिखा था के रूप में हम सभी जानते हैं HashMap एक अशक्त कुंजी और मान जोड़ी की अनुमति देता है, HashMap के बारे में एक संदेह है,,

m.put(null,null); 
m.put(null,a); 

यह एक (त्रुटि फेंक होगा या अपवाद) या यह मूल्य को ओवरराइड करेगा या पुनः प्राप्त करने का मूल्य क्या होगा ??

+38

आप कोशिश क्यों नहीं करते? –

+3

चेकआउट संग्रह API। एक कुंजी के लिए नल हमेशा एक बुरा विकल्प है। तो जांचें कि आप क्या करना चाहते हैं। दो बराबर कुंजियों के मामले में पहले के मूल्य को वर्तमान द्वारा प्रतिस्थापित किया जाएगा। – Diversity

+0

जांचें: http://stackoverflow.com/questions/1669885/what-happens-when-a-duplicate-key-is-put-into-a-hashmap – Diversity

उत्तर

4

डुप्लिकेट को समझ में नहीं आता है, यह आपको जोड़ने की अनुमति देता है लेकिन यह इस कुंजी की परवाह नहीं करता है कि पहले से ही कोई मान है या नहीं। तो के लिए वर्तमान में एक प्रमुख वहाँ केवल एक मूल्य

हो जाएगा यह चुपचाप null कुंजी के लिए value ओवरराइड करता है। कोई अपवाद नहीं।

जब आप प्राप्त करने का प्रयास करते हैं, तो null के साथ अंतिम डाला गया मान वापस आ जाएगा।

यह केवल null और किसी भी कुंजी के लिए नहीं है।

एक त्वरित उदाहरण

Map m = new HashMap<String, String>(); 
    m.put("1", "a"); 
    m.put("1", "b"); //no exception 
    System.out.println(m.get("1")); //b 
7
एक HashMap में

प्रत्येक कुंजी है अद्वितीय होना चाहिए।

जब "डुप्लिकेट कुंजी जोड़ना" पुराना मान (उसी कुंजी के लिए, जैसे कुंजी अनन्य होनी चाहिए) बस प्रतिस्थापित की जाती है; देखें HashMap.put:

इस मानचित्र में निर्दिष्ट कुंजी के साथ निर्दिष्ट मान को संबद्ध करता है। यदि नक्शा में पहले कुंजी के लिए मैपिंग था, पुराना मान बदल दिया गया है।

कुंजी से संबंधित पिछले मान को वापस करता है, या शून्य के लिए कोई मैपिंग नहीं होने पर शून्य हो जाता है।

जहाँ तक nulls के रूप में: एक ही अशक्त कुंजी अनुमति दी है (जैसा कि कुंजियां अनन्य होनी चाहिए), लेकिन HashMap अशक्त मूल्यों के किसी भी संख्या हो सकती है, और एक अशक्त कुंजी एक शून्य मान की आवश्यकता नहीं है। documentation प्रति:

[.. HashMap] परमिट शून्य मूल्यों और [एक] अशक्त कुंजी

हालांकि, प्रलेखन कुछ भी नहीं के बारे में अशक्त/बातिल एक विशिष्ट मुख्य/मान जोड़े या नल/"एक" अमान्य किया जा रहा होने के लिए की आवश्यकता होगी, कहते हैं।

16

HashMap प्रकार है कि कुंजी ओवरराइट करें अगर hashmap कुंजी एक ही कुंजी है

map.put("1","1111"); 
map.put("1","2222"); 

उत्पादन

key:value 
1:2222 
3

HashMap डुप्लिकेट चाबी की अनुमति नहीं है, लेकिन जब से यह सुरक्षित थ्रेड नहीं है, यह डुप्लिकेट चाबी हो सकता है । उदाहरण:

while (true) { 
      final HashMap<Object, Object> map = new HashMap<Object, Object>(2); 
      map.put("runTimeType", 1); 
      map.put("title", 2); 
      map.put("params", 3); 
      final AtomicInteger invokeCounter = new AtomicInteger(); 

      for (int i = 0; i < 100; i++) { 
       new Thread(new Runnable() { 
        @Override 
        public void run() { 
         map.put("formType", invokeCounter.incrementAndGet()); 
        } 
       }).start(); 
      } 
      while (invokeCounter.intValue() != 100) { 
       Thread.sleep(10); 
      } 
      if (map.size() > 4) { 
// this means you insert two or more formType key to the map 
       System.out.println(JSONObject.fromObject(map)); 
      } 
     } 
संबंधित मुद्दे