2012-11-30 27 views
9

TreeMap क्रमबद्ध कैसे करता है? उदाहरण के लिए मान लीजिए कि आप निम्न नक्शा है:ट्रीमैप यह कैसे क्रमबद्ध करता है

TreeMap<String, Integer> treemap = new TreeMap<>(); 
treemap.put("lol", 1); 
treemap.put("Marc", 2); 
treemap.put("Jesper", 3); 

Iterator ittwo = treemap.entrySet().iterator(); 
    while (ittwo.hasNext()) { 
    Map.Entry pairs = (Map.Entry)ittwo.next(); 
    System.out.println(pairs.getKey() + " = " + pairs.getValue()); 
    ittwo.remove(); 
} 

इस के उत्पादन में है:

Jesper = 3 
Marc = 2 
lol = 1 

तो अगर इसकी नहीं वर्णानुक्रम क्या यह तो है?

उत्तर

23

यह केवल वर्णमाला नहीं है, बल्कि यह ऊपरी/नीचे केस संवेदनशील भी है।

TreeMap<String, Integer> treemap = new TreeMap<String, Integer>(); 
treemap.put("Lol", 1); 
treemap.put("Marc", 2); 
treemap.put("Jesper", 3); 
treemap.put("lol1", 1); 
treemap.put("marc1", 2); 
treemap.put("jesper1", 3); 

आउटपुट:

Jesper = 3 
Lol = 1 
Marc = 2 
jesper1 = 3 
lol1 = 1 
marc1 = 2 

इसलिए, यदि आप इसकी आवश्यकता नहीं है, आप अपने कस्टम तुलनित्र उपयोग कर सकते हैं, और लोअर केस में स्ट्रिंग तुलना:

TreeMap<String, Integer> treemap = new TreeMap<String, Integer>(new Comparator<String>() { 
    public int compare(String o1, String o2) { 
     return o1.toLowerCase().compareTo(o2.toLowerCase()); 
    } 
}); 
treemap.put("Lol", 1); 
treemap.put("Marc", 2); 
treemap.put("Jesper", 3); 
treemap.put("lol1", 1); 
treemap.put("marc1", 2); 
treemap.put("jesper1", 3); 

आउटपुट:

Jesper = 3 
jesper1 = 3 
Lol = 1 
lol1 = 1 
Marc = 2 
marc1 = 2 
+2

'नया तुलनाकर्ता () { सार्वजनिक int तुलना (स्ट्रिंग ओ 1, स्ट्रिंग ओ 2) { वापसी o1.compareToIgnoreCase (o2); } } ' – Shawn

2

जैसा कि आपनेपास नहीं कियाकन्स्ट्रक्टर के माध्यम से, इसलिए यह अपनी चाबियों के प्राकृतिक क्रम का उपयोग करके एक नया TreeMap तैयार करेगा।

जावा में प्राकृतिक क्रम का अर्थ है lexicographical आदेश।

1

आप वास्तव में सही आउटपुट प्राप्त कर रहे हैं।

J(uppercase J)>M(uppercase M)>l(lowercase l). 

बड़े अक्षरों लोअर केस अक्षरों

5

से lexcographically अधिक हैं stated in the JavaDoc के रूप में एक TreeMap "... इसके कुंजी के प्राकृतिक क्रम के अनुसार क्रमित कर रहा है ..." (जोर मेरा है)।

इस प्रकार अपने परिणाम प्रकाश कि छोटे अक्षर l के बाद बड़े M UTF "वर्णमाला" में है में सही है, तो।

क्या आप डिफ़ॉल्ट व्यवहार को ओवरराइड करना चाहते हैं, तो आप को TreeMap कन्स्ट्रक्टर में आपूर्ति कर सकते हैं।