如何获取LinkedHashMap的keyIterator?

2022-09-03 16:33:58

通过查看来自Sun的LinkedHashMaps的源代码,我看到有一个名为KeyIterator的私有类,我想使用它。如何获得访问权限?


答案 1

您可以通过致电获得它

myMap.keySet().iterator();

你甚至不需要知道它的存在;它只是实现的一个工件。就你所知,他们可能正在使用飞行的猴子来迭代密钥;只要它们根据规范进行迭代,它们如何做都无关紧要。

顺便说一句,您是否知道有一个名为(如,,,,和)的私有类?
这是否会影响您迭代 a 键的方式?HashMapKeyIteratorConcurrentHashMapConcurrentSkipListMapEnumMapIdentityHashMapTreeMapWeakHashMapHashMap


编辑:在回复您的注释时,请注意,如果您尝试迭代 中的所有键值对,则有一种比迭代键并调用每个键更好的方法。entrySet() 方法获取所有键值对的一个,然后您可以循环访问这些键值对。因此,与其写:MapgetSet

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 接口中定义的,因此它们将适用于任何 ,而不仅仅是 。keySetentrySetvaluesMapLinkedHashMap


答案 2

这是一个私人课程,所以你不能直接使用它。

  private class KeyIterator extends LinkedHashIterator<K> {

当您使用普通迭代器时,将返回它的实例。

myMap.keySet().iterator()