2010-01-08 53 views
2

我有兩個數組列表A1,A2。 A1的每個元素都是關鍵字,A2的每個元素都是對應的值。所以我找到的解決方案是循環在A1(A1和A2具有相同的大小)使hashmap.add(A1 [i],A2 [i]),但有沒有辦法直接發送鍵值對作爲兩組?我想避免循環它會減慢我的代碼。先謝謝你!HashMap:獲取arraylist是一組鍵或值

回答

2

你有一個鍵值對的列表。獲取該列表並將其添加到Hashmap的唯一方法是迭代列表。如果您的鍵值對存儲在某個其他類型的Map對象中,則可以使用Hashmap構造函數HashMap(Map<? extends K,? extends V> m)而不是ArrayList

如果是正確的方法,不要擔心代碼中的迭代。記住Polya:找到一個解決方案,然後看看你是否能找到更好的解決方案。

+2

當然,這個構造函數也會遍歷整個參數映射。 – 2010-01-08 16:12:51

+0

嗨Dougman,謝謝你的回答和小短語! – user235693 2010-01-08 17:52:03

+0

邁克爾你給我的好細節! – user235693 2010-01-08 17:54:18

5

「我想避免循環它會減慢我的代碼。」任何時候代碼都會執行任何操作,這會減慢代碼的速度。關鍵是要避免做你不需要做的事情。有些東西需要遍歷你的列表。

0

也許你將能夠避免重複,將數據插入到數組直接做入HashMap中。

祝你好運!

+0

是的,我終於找到了一種方法讓我的代碼允許我這樣做! :) – user235693 2010-01-08 17:52:56

2

如果您碰巧能夠控制將項目插入陣列的順序,並且可以按排序順序執行此操作,則最終可能不需要HashMap。雖然哈希查找將表現出分期常量時間,您可以在O(log n)的時間binary search對像數組排序的隨機接入序列得到查找。函數Arrays#binarySearch()允許您確定哪個元素(如果有)與第一個數組中的鍵匹配,並且在給定該位置後,可以訪問並行數組中的對應值。

這種方法,當你建立數據只有一次,經常查找條目,並且不做任何後續添加或條目刪除是最有利的。

+1

你甚至可以把它包裝在你自己的Map實現中,它可以有一個2 List參數的構造函數:) – extraneon 2010-01-08 16:12:39

+0

是的,你可能想要爲所有的變異方法拋出'UnsupportedOperationException',包括那些由迭代器暴露。 – seh 2010-01-08 16:35:57

+0

嗨,呃,這就是問題所在,我無法控制將項目插入數組的順序。 – user235693 2010-01-08 17:50:41

相關問題