2011-07-12 11 views
10

मैं इसी तरह से तलाश कर रहा हूँ, Multimap के लिए, एक Map की प्रविष्टियों से अधिक पुनरावृति करने के लिए, अर्थात्:अमरूद: कुंजी पर पुन: सक्रिय करने का सबसे अच्छा तरीका-> मल्टीमैप की संग्रह प्रविष्टियां?

Map<K,V> map = ...; 
for (Map.Entry<K,V> entry : map.entrySet()) 
{ 
    K k = entry.getKey(); 
    V v = entry.getValue(); 
} 

निम्नलिखित बेहतर है में से कौन सा? (या शायद अधिक महत्वपूर्ण मतभेद क्या हैं?)

Multimap<K,V> mmap = ...; 
for (Map.Entry<K,Collection<V>> entry : mmap.asMap().entrySet()) 
{ 
    K k = entry.getKey(); 
    Collection<V> v = entry.getValue(); 
} 

या

Multimap<K,V> mmap = ...; 
for (K k : mmap.keySet()) 
{ 
    Collection<V> v = mmap.get(k); 
} 

उत्तर

13

वे दोनों वैध हैं; दूसरा पढ़ने के लिए बहुत आसान हो जाता है (विशेष रूप से आप ListMultimap से बाहर और इसी तरह से प्राप्त कर सकते हैं), लेकिन पहला अधिक कुशल हो सकता है (ऐसी डिग्री के लिए जो आपके लिए महत्वपूर्ण हो या इससे कोई फर्क नहीं पड़ता)।

+0

क्या आप समझा सकते हैं कि पहला दृष्टिकोण अधिक कुशल क्यों हो सकता है? – user482594

3

मैं कहूँगा कि अमरूद लोगों के लिए पर्याप्त विचारशील आप इसे किसी भी तरह से करने के लिए, अपनी आवश्यकताओं पर निर्भर करता है अनुमति देने के लिए थे । उदाहरण के लिए, यदि संरचना महत्वपूर्ण है, और आप अपने मल्टीमैप को समूहीकृत तरीके से देखना चाहते हैं, तो बाद वाला अधिमान्य होगा। ओटीओएच, यदि आप मल्टीमैप को कुंजी-मूल्य जोड़े के सेट के रूप में देखना चाहते हैं, जहां डुप्लिकेट कुंजी महत्वहीन हैं, तो आप mmap.entries का उपयोग करना पसंद कर सकते हैं। वास्तव में यह संदर्भ है कि संदर्भ में सबसे उपयुक्त क्या है कि आपके मल्टीमैप का उपयोग किया जा रहा है।

+1

असल में, मुझे नहीं लगता कि यह वह भेद है जिसे ओपी पूछ रहा है। –

संबंधित मुद्दे