सभी को नमस्कार!
जावा साक्षात्कार के विषय में
। संग्रह जावा में सेट एंड मैप के साथ काम करने के मुद्दे को विस्तार से बताते हैं। लेकिन मेरे पास अभी भी इस क्षेत्र के कुछ पसंदीदा प्रश्न हैं:
- नल को मानचित्र में एक कुंजी के रूप में इस्तेमाल किया जा सकता है?
- सेट शून्य हो सकता है?
टूलटिप (HashMap.java)public V get(Object key) { if (key == null) return getForNullKey(); int hash = hash(key.hashCode()); for (Entry<K,V> e = table[indexFor(hash, table.length)]; e != null; e = e.next) { Object k; if (e.hash == hash && ((k = e.key) == key || key.equals(k))) return e.value; } return null; } private V getForNullKey() { for (Entry<K,V> e = table[0]; e != null; e = e.next) { if (e.key == null) return e.value; } return null; }
यह माना जाता है कि एक जिज्ञासु पाठक स्वतंत्र रूप से उत्तरों पर प्रतिबिंबित करेगा और फिर उनकी तुलना मेरी से करेगा। सबसे अधीर तुरंत बिल्ली के लिए आगे बढ़ सकता है।
1. क्या मानचित्र में एक कुंजी के रूप में नल का उपयोग किया जा सकता है?
HashMap
Map map = new HashMap(); map.put(null, "test");
हम अंदर देखते हैं
System.out.println(map.size());
क्या चल रहा है? स्रोत से उद्धरण:
जब एक नया कुंजी-मूल्य जोड़ा जाता है, तो यह कुंजी के हैश कोड की गणना करता है, जिसके आधार पर टोकरी संख्या (सरणी का सेल नंबर), जिसमें नया तत्व प्राप्त होता है, की गणना की जाती है।
यही है, यह पता चला है कि हैश-कोड की गणना नल ... हम्मम से की जाती है। लेकिन बिना हैशकोड () के बिना किसी वस्तु की गणना कैसे की जाती है? मेरा जवाब है मैं नहीं जानता, लेकिन डिबगर से पता चलता है कि null हैश = 0 के लिए। जाहिरा तौर पर कहीं न कहीं एक अलग जाँच है।
फिर सभी आश्चर्य के बिना, हैश = 0 के साथ एक और वस्तु उसी "टोकरी" में गिर जाती है।
map.put(0, "0"); System.out.println(map.size());
उत्तर नंबर 1: हैशपॉप बिना किसी समस्या के अशक्त कुंजी से संचालित होता है। इसका हैश हमेशा 0 होता हैएक विशेष रूप से विदेशी मामले के लिए map.put (अशक्त, अशक्त) Map map = new HashMap(); map.put(null, null); map.get(null);
धन्यवाद
Vanger13 ट्री-मैप
Map map = new TreeMap(); map.put(null, "null");
हम अंदर देखते हैं
System.out.println(map.size());
लेकिन यह सब इतनी अच्छी तरह से शुरू हुआ! पुट लगाओ, यह वहाँ है (आकार = 1), लेकिन हम इसे वापस नहीं ला सकते। अच्छा, ठीक है, मान लें कि हमें कुछ भी हासिल नहीं करना है। और हम केवल डालना चाहते हैं, ये अजीब हैं। हम कोशिश करते हैं।
Map map = new TreeMap(); map.put(null, "null");
सिंगल मेपा, किसी तरह। या नहीं? नाटक जोड़ें, प्रविष्टि क्रम बदलें
Map map = new TreeMap(); map.put(0, "0");
यह किस प्रकार की डेज़ी है? शून्य काम करता है, तो यह काम नहीं करता है! लेकिन यह पता चला है। जब हम शून्य कुंजी को एक खाली पेड़ में जोड़ते हैं - तो यह जड़ में गिर जाता है। और जड़, कामरेड, वह भी अफ्रीका में जड़ है, वह अन्य सभी की तुलना में अधिक समान है, तुलना () उसके लिए नहीं कहा जाता है और नल शांति से पेड़ की जड़ में अपना स्थान लेता है। और अगर पेड़ खाली नहीं है, तो मौजूदा सामग्री के साथ तुलना करने का प्रयास शुरू होता है, और हमें एक "वैध" एनपीई मिलता है। नल के लिए कोई विशेष शर्तें यहां प्रदान नहीं की गई हैं।
उत्तर संख्या 2: आप एक रिक्त ट्री-मैप में एक ही कुंजी-नल रख सकते हैं, अन्य सभी ऑपरेशन (आकार () और स्पष्ट) (वैसे,) उसके बाद काम नहीं करते हैं। आप किसी भी रिक्त ट्रीप में एक नल कुंजी को तुल नहीं सकते हैं क्योंकि तुलनित्र () के लिए अनिवार्य कॉल के कारण।2. सेट शून्य हो सकता है?
इस सवाल का जवाब पिछले वाले को दोहराता है, यह देखते हुए कि सेट, वास्तव में, मैप के आधार पर लागू किया जाता है। हैशसेट एक धमाके के साथ काम करता है, ट्रीसेट - केवल पहले तत्व के लिए।
आपका ध्यान देने के लिए धन्यवाद।
उपयोगी लिंक:
जावा नौकरी के लिए साक्षात्कार। Sphinks द्वारा
संग्रहडेटा संरचनाएं: द्विआधारी पेड़। भाग 1 अदरक द्वारा
डेटा संरचनाएं: द्विआधारी पेड़। भाग 2: विंगर द्वारा
संतुलित पेड़ों की समीक्षाचित्रों में डेटा संरचनाएं। टार्ज़न 82 द्वारा
हैशपॉप