द्वारा समवर्ती मानचित्र प्रविष्टियों को क्रमबद्ध करें Map
का थ्रेड-सुरक्षित कार्यान्वयन करने का कोई तरीका है जो इसकी प्रविष्टियों को मूल्य द्वारा क्रमबद्ध करता है? मैं जानता हूँ कि मैं एक धागा सुरक्षित इसमूल्य
ConcurrentMap<String, Double> rankings = new ConcurrentHashMap<String, Double>();
तरह Map
बना सकते हैं और मैं तो एक उपयोगिता विधि करने के लिए इसे इस तरह पारित करके प्रविष्टियों मूल्य के अनुसार क्रमबद्ध प्राप्त कर सकते हैं:
public static <K, V extends Comparable<? super V>> Map<K, V> sortByValue(Map<K, V> map) {
List<Map.Entry<K, V>> list = new LinkedList<Map.Entry<K, V>>(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<K, V>>() {
@Override
public int compare(Map.Entry<K, V> o1, Map.Entry<K, V> o2) {
return (o1.getValue()).compareTo(o2.getValue());
}
});
Map<K, V> result = new LinkedHashMap<K, V>();
for (Map.Entry<K, V> entry : list) {
result.put(entry.getKey(), entry.getValue());
}
return result;
}
लेकिन मैं क्या ' मैं देख रहा हूं कि एक थ्रेड-सुरक्षित Map
है कि मान द्वारा क्रमबद्ध प्रविष्टियों को रखता है, ताकि मुझे मान द्वारा क्रमबद्ध प्रविष्टियों को रखने के लिए उपरोक्त के रूप में उपरोक्त विधि को कॉल करने की आवश्यकता न हो। मुझे लगता है कि मैं एक कार्यान्वयन की तलाश में हूं जो ConcurrentHashMap
और LinkedHashMap
के व्यवहार को जोड़ती है, लेकिन अभी तक कोई नहीं मिला है।
ConcurrentSkipListMap लगभग जो भी मैं चाहता हूं उसे प्रदान करता है, लेकिन यह केवल महत्वपूर्ण मूल्य द्वारा क्रमबद्ध करने का समर्थन करता है।
आपके उपयोग-मामले में, क्या आप समस्या को * अद्वितीय * मानों तक सीमित कर सकते हैं, या क्या आपको कभी-कभी डुप्लिकेट मान मिलते हैं? यदि आपके पास डुप्लिकेट मान हैं, तो क्या आपके पास और अधिक क्रमबद्ध बाधाएं हैं? –
इसके अलावा, कृपया स्पष्ट करें - क्या आप चाहते थे * क्रमबद्ध * या * आदेश दिया *? एक LinkedHashMap आपको आदेश देता है, लेकिन क्रमबद्ध नहीं करता है। –
उम ..... क्रमबद्ध और आदेशित के बीच क्या अंतर है? –