मैंने कुछ वास्तव में डरावनी वृक्षारोपण व्यवहार का अनुभव किया है और मुझे एक छोटे से टेस्ट केस को कम करने में कुछ परेशानी हुई है, इसलिए मेरे साथ भालू।TreeMap put() चुपचाप अन्य प्रविष्टियों को हटा देता है?
मैं रनटाइम पर प्रदान की गई फ़ाइल से मानचित्र में बड़ी संख्या में कुंजी-मूल्य जोड़ों को पढ़ना चाहता हूं। मैं एक कस्टम कुंजी वर्ग का उपयोग कर रहा हूँ। बाद में, जब मैं प्रविष्टियों को वापस खींचने के लिए जाता हूं, तो मुझे लगता है कि उनमें से एक या अधिक गायब हैं। एक डीबगर और कुछ परीक्षण मामलों का उपयोग करके, मैंने यह निर्धारित किया है कि लापता प्रविष्टि (ies) निश्चित रूप से पढ़ने के चरण के दौरान गायब हो रही हैं, लेकिन मुझे यकीन नहीं है कि इसका क्या कारण है।
असल:
Map<MyKey,Double> map = new TreeMap<MyKey,Double>();
map.put(key1,value1);
// ... put another ~500 entries into the map ...
assertTrue(map.containsKey(key1)); // passes
if (!map.containsKey(keyN)) {
map.put(keyN, valueN); // this code executes
}
assertTrue(map.containsKey(key1)); // FAILS
... तो अनिवार्य रूप से, नक्शे के लिए एक नया कुंजी जोड़ने एक असंबंधित प्रविष्टि इसे से बाहर गिर कारण बनता है।
- मैं सिर्फ अकेले कुंजी 1 और keyN जोड़ते हैं, तो कुंजी 1 मानचित्र में रहता है - बीच 500 प्रविष्टियों किसी भी तरह महत्वपूर्ण
- हैं मैं .. 2 से एक या दो मनमाना कुंजी को दूर (एन -1), key1 को तब भी बूट किया जाता है जब कुंजीएन जोड़ा जाता है
- यदि मैं 2 से बड़ी चाबियाँ हटा देता हूं .. (एन -1), कुंजी 1 तब जोड़ा जाता है जब keyN जोड़ा जाता है, लेकिन जब (कहें) keyQ जोड़ा जाता है, ~ 300 कुंजी
- दुर्भाग्यवश मानचित्र का आकार जब keyN kicks out key1 है मानचित्र के आकार के समान ही है जब keyQ key1 kicks out, तो यह probab है ly सीमित आकार के मुद्दे
- यदि मैं इसके बजाय हैश मैप का उपयोग करता हूं, तो कुंजी 1 मानचित्र में रहता है
- कस्टम कुंजी वर्ग MyKey तुलनात्मक, बराबर, और हैशकोड के लिए एक ही तर्क का उपयोग करता है।
मैं प्रारंभ में ट्रीमैप का उपयोग कर रहा था क्योंकि मुझे बड़े डेटासेट का उपयोग करने की उम्मीद है, और ट्रीमैप थोड़ा और स्मृति-कुशल है। हैश मैप एक अच्छा विकल्प होगा, लेकिन यह अभी भी खतरनाक है कि ट्रीएप इस तरह से व्यवहार करता है - किसी के पास क्या हो रहा है पर विचार है?
स्टीव कुओ के साथ सहमत हैं। अपनी तुलना में टिप्पणी करें/बराबर/हैशकोड कार्यान्वयन और अपना परीक्षण फिर से चलाएं और देखें कि क्या आपको एक ही समस्या है या नहीं। – digitaljoel