如何获取LinkedHashMap的keyIterator?
2022-09-03 16:33:58
通过查看来自Sun的LinkedHashMaps的源代码,我看到有一个名为KeyIterator的私有类,我想使用它。如何获得访问权限?
通过查看来自Sun的LinkedHashMaps的源代码,我看到有一个名为KeyIterator的私有类,我想使用它。如何获得访问权限?
您可以通过致电获得它
myMap.keySet().iterator();
你甚至不需要知道它的存在;它只是实现的一个工件。就你所知,他们可能正在使用飞行的猴子来迭代密钥;只要它们根据规范进行迭代,它们如何做都无关紧要。
顺便说一句,您是否知道有一个名为(如,,,,和)的私有类?
这是否会影响您迭代 a 键的方式?HashMap
KeyIterator
ConcurrentHashMap
ConcurrentSkipListMap
EnumMap
IdentityHashMap
TreeMap
WeakHashMap
HashMap
编辑:在回复您的注释时,请注意,如果您尝试迭代 中的所有键值对,则有一种比迭代键并调用每个键更好的方法。entrySet()
方法获取所有键值对的一个,然后您可以循环访问这些键值对。因此,与其写:Map
get
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()
循环访问值。
请注意,由于 、 和 是在 Map
接口中定义的,因此它们将适用于任何 ,而不仅仅是 。keySet
entrySet
values
Map
LinkedHashMap
这是一个私人课程,所以你不能直接使用它。
private class KeyIterator extends LinkedHashIterator<K> {
当您使用普通迭代器时,将返回它的实例。
myMap.keySet().iterator()