java - 如何获得 LinkedHashMap 的 keyIterator?

标签 java iterator linkedhashmap

通过查看 Sun 的 LinkedHashMaps 的源代码,我看到有一个名为 KeyIterator 的私有(private)类,我想使用它。我怎样才能获得访问权限?

最佳答案

调用即可

myMap.keySet().iterator();

您甚至不需要知道它的存在;它只是实现的产物。就您所知,他们可能正在使用飞猴来迭代键;只要它们根据规范进行迭代,它们如何做并不重要。

顺便说一句,你知道吗 HashMap 有一个名为 KeyIterator 的私有(private)类(ConcurrentHashMapConcurrentSkipListMapEnumMapIdentityHashMapTreeMapWeakHashMap)?
这对您如何遍历 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() 遍历这些值如果你愿意的话。

请注意,由于 keySetentrySetvalues 是在 Map interface 中定义的,它们将适用于任何 Map,而不仅仅是 LinkedHashMap

关于java - 如何获得 LinkedHashMap 的 keyIterator?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/978200/

相关文章:

Java Ram 使用不一致

java - Ant javac 任务出错 : [javac] warning: [options] bootstrap class path not set in conjunction with -source 1. 6

java - 如何从二维数组列表中的特定位置提取整数?

Java - 带条件的对象循环?

c++ - 如何将 deque>>vector>>bytes 迭代到函数

java - 在将字符串存储到数组之前,如何将它们放入 HashMap 中?

java - 如何从 HashMap 或 LinkedHashMap 中获取有限数量的值?

java - JTextField,删除结束字符

java - 如何将字符串数组转换为字节数组? ( java )

java - 是否有一个 Spring 拦截器在 UsernamePasswordAuthenticationFilter 之前被调用?