通过查看 Sun 的 LinkedHashMaps 的源代码,我看到有一个名为 KeyIterator 的私有(private)类,我想使用它。我怎样才能获得访问权限?
最佳答案
调用即可
myMap.keySet().iterator();
您甚至不需要知道它的存在;它只是实现的产物。就您所知,他们可能正在使用飞猴来迭代键;只要它们根据规范进行迭代,它们如何做并不重要。
顺便说一句,你知道吗 HashMap
有一个名为 KeyIterator
的私有(private)类(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
。
关于java - 如何获得 LinkedHashMap 的 keyIterator?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/978200/