如何获取LinkedHashMap的keyIterator?

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,entrySetvalues,在Map界面中定义,它们将适用于任何Map,而不仅仅是LinkedHashMap.