sol*_*oth 14 java iterator linkedhashmap
通过查看Sun的LinkedHashMaps的源代码,我看到有一个名为KeyIterator的私有类,我想使用它.我怎样才能获得访问权限?
Mic*_*ers 45
你通过电话得到它
myMap.keySet().iterator();
Run Code Online (Sandbox Code Playgroud)
你甚至不需要知道它存在; 它只是实现的一个工件.如你所知,他们可能正在使用飞猴来重复密钥; 只要它们按照规范进行迭代,它们如何做就没有关系.
顺便说一句,你可知道,HashMap
有一个叫做私有类KeyIterator
(如做ConcurrentHashMap
,ConcurrentSkipListMap
,EnumMap
,IdentityHashMap
,TreeMap
,和WeakHashMap
)?
这会对你如何迭代一个键有所不同HashMap
吗?
编辑:在效应初探您的意见,要知道,如果你想遍历所有键值对的Map
,还有比遍历键和调用一个更好的方式get
为每个.该entrySet()
方法获取Set
所有键值对,然后您可以迭代.所以不要写:
for (Key key : myMap.keySet()) {
Value val = myMap.get(key);
...
}
Run Code Online (Sandbox Code Playgroud)
你应该写:
for (Map.Entry<Key, Value> entry : myMap.entrySet()) {
doSomethingWithKey(entry.getKey());
doSomethingWithValue(entry.getValue());
...
}
Run Code Online (Sandbox Code Playgroud)
如果需要,您还可以迭代值values()
.
请注意,因为keySet
,entrySet
和values
,在Map
界面中定义,它们将适用于任何Map
,而不仅仅是LinkedHashMap
.