ए Comparator
मैंने अपने TreeMap
में उपयोग किए गए व्यवहार को तोड़ दिया जिसका इरादा उस TreeMap
के लिए किया गया था। निम्नलिखित कोड को देखो:केस-असंवेदनशील तुलनाकर्ता मेरे ट्रीमैप को तोड़ता है
TreeMap<String, String> treeMap = new TreeMap<>(new Comparator<String>() {
public int compare(String o1, String o2) {
return o1.toLowerCase().compareTo(o2.toLowerCase());
}
});
treeMap.put("abc", "Element1");
treeMap.put("ABC", "Element2");
क्या मुझे लगता है कि मैंने किया है कि मैं एक नक्शा है कि इसकी कुंजी के अनुसार क्रमबद्ध किया जाता है, केस-संवेदी बनाया है है। दो अलग-अलग तत्वों में गैर-बराबर कुंजी होती हैं (abc
और ABC
) जिनकी तुलना 0
वापस आ जाएगी। मुझे उम्मीद है कि दोनों तत्वों का सिर्फ एक यादृच्छिक क्रम है। फिर भी, आदेश:
System.out.println("treeMap: " + treeMap);
में हुई:
treeMap: {abc=Element2}
कुंजी abc
फिर से सौंपा गया है मूल्य Element2
!
क्या कोई यह समझा सकता है कि यह कैसे हो सकता है और यदि यह TreeMap
का वैध, दस्तावेज व्यवहार है?
से कुछ का उपयोग करना चाहिए 'Comparator' एक * कुल आदेश * है। आपके मानचित्र में "एबीसी" और "एबीसी" के लिए इसका क्या अर्थ है? जो पहले आता है? –
आपको अपना इरादा (यदि अप्रत्याशित) व्यवहार मिला है; आपका तुलनित्र केस-असंवेदनशील है, आपका नक्शा उस तुलनित्र का उपयोग करता है - इसलिए यह विस्तार से, केस-असंवेदनशील (w.r.t. कुंजी) भी है। * आपने अभी यह पता लगाया है कि कैसे मामला असंवेदनशील है * - आपके लिए कुडोस, लेकिन मुझे यहां "चौंकाने वाला" या "अवैध" कुछ भी नहीं दिख रहा है ... यह वही कर रहा है जो आपने * यह करने के लिए कहा था। – vaxquis
संबंधित: [जावा ट्रीमैप कस्टम तुलनित्र अजीब व्यवहार] (https://stackoverflow.com/questions/30219835/java-treemap-custom-comparator-weird-behaviour) –