2011-07-12 32 views
10

我正在尋找相應的方式,Multimap,遍歷條目的Map,即:guava:迭代Multimap的key-> collection條目的最佳方法是什麼?

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等得到一個實際的List),但第一個可能更有效率(在某種程度上對您而言可能並不重要)。

+0

你能解釋爲什麼第一種方法可能更高效嗎? – user482594

3

我要說的是,番石榴鄉親足夠體貼,讓你做到這一點無論哪種方式,取決於你的需求。例如,如果結構確實很重要,並且希望以分組方式查看您的multimap,則後者將是優先的。 OTOH,如果您希望將multimap視爲一組鍵值對,而重複鍵不重要,那麼您可能更願意使用mmap.entries。這實際上是在使用您的multimap的情況下最適合的問題。

+1

其實,我不認爲這是OP所問的區別。 –

相關問題