通過查看Sun的LinkedHashMaps的源代碼,我發現有一個名爲KeyIterator的私有類,我想使用它。我如何獲得訪問權限?如何獲得LinkedHashMap的keyIterator?
11
A
回答
42
通過調用
myMap.keySet().iterator();
你不應該甚至不需要知道它的存在得到它;這只是實施的一個神器。對於你所知道的,他們可以用飛猴來重複鍵盤;只要他們按照規範進行迭代,他們是如何做的並不重要。
順便問一下,你可知道,HashMap
有一個名爲KeyIterator
私有類(如做ConcurrentHashMap
,ConcurrentSkipListMap
,EnumMap
,IdentityHashMap
,TreeMap
和WeakHashMap
)?
這是否會影響您如何遍歷HashMap
的密鑰?
編輯:在效應初探您的意見,要知道,如果你想在一個Map
所有鍵 - 值對迭代,還有比遍歷鍵,並呼籲更好的辦法各爲get
。方法entrySet()
獲得所有鍵值對的Set
,然後您可以迭代。因此,而不是寫:
for (Key key : myMap.keySet()) {
Value val = myMap.get(key);
...
}
你應該寫:
for (Map.Entry<Key, Value> entry : myMap.entrySet()) {
doSomethingWithKey(entry.getKey());
doSomethingWithValue(entry.getValue());
...
}
如果你願意,也可以與values()
遍歷值。
注意,因爲keySet
,entrySet
,並且values
在Map
interface定義,他們會爲任何Map
工作,不只是LinkedHashMap
。
3
不應該使用定義爲LinkedHashMap的內部實現的一部分的任何東西(即在源代碼中但未在API中定義)。如果內部實施在下一個版本中發生變化,會發生什麼?所有使用它的代碼都會中斷。
你應該在代碼的API,並完成類似
myMap.keySet().iterator()
3
這是一個私有類,所以你不能直接使用它。
private class KeyIterator extends LinkedHashIterator<K> {
當您使用正常的Iterator時,會返回它的一個實例。
myMap.keySet().iterator()
相關問題
- 1. Java - 如何從LinkedHashMap獲取單個對?
- 2. 如何做在LinkedHashMap的
- 3. 獲取linkedhashmap的第一項
- 4. 爪哇 - 循環通過LinkedHashMap的,並獲得價值
- 5. 如何用Hibernate映射LinkedHashMap?
- 6. 無法獲取在LinkedHashMap中
- 7. 如何在Android上顯示LinkedHashMap <string,LinkedHashMap <string,string >>
- 8. 在java中獲得下一個鍵盤Linkedhashmap
- 9. 如何獲取LinkedHashMap中給定鍵的值?
- 10. 如何從Java中的LinkedHashMap獲取所有條目?
- 11. 如何通過元素索引獲取LinkedHashMap的子圖?
- 12. Jackson JSON + Java泛型得到LinkedHashMap
- 13. 如何訪問LinkedHashMap中的鏈表?
- 14. 如何保留JSONObject中的LinkedHashMap排序?
- 15. 獲取密鑰的LinkedHashMap索引
- 16. 如何訪問嵌套對象的數據在LinkedHashMap中存在的LinkedHashMap
- 17. LinkedHashMap中的NullPointerException
- 18. java中的LinkedHashMap
- 19. Perl中的LinkedHashMap
- 20. LinkedHashMap的簽名
- 21. .NET中的LinkedHashMap
- 22. Sorting LinkedHashMap
- 23. 如何根據索引從LinkedHashMap獲取值而不是鍵?
- 24. 如何從LinkedHashMap中以升序獲取值
- 25. 如何獲得
- 26. 如何獲得
- 27. 如何獲得
- 28. 如何獲得
- 29. 如何獲得
- 30. 如何獲得
它只是沒有發生,我可以迭代一個LinkedHashMap,直到我看到內部私人類。但感謝您的答案。 – 2009-06-11 02:12:15