关于 HashMap 集合的 keySet() 方法

About HashMap collection's keySet() method

Map<K, V> map = HashMap<K, V>();

Set<K> keySet = map.keySet(); //'map' is  parameter of HashMap object

Iterator<K> keyIterator = keySet.iterator();

我正在研究如何通过 'Iterator' 获取密钥。上面的代码是其中的一部分。

但是 [Set<K> keySet = map.keySet();] <- 在这部分

不就是HashMapkeySet()方法是Set接口的 keySet()方法在HashMap中重新定义的吗?

但是我在JAVAAPI文档的方法菜单中找不到它。

keySet() 方法 returns HashMap 类型 KeySet 中的一组键。 HashMap 中的内部实现实现 AbstractSet 并将键存储到名称为 keySet.

的集合中

HashMap 中实现的层次结构:

|---- Collection<E> extends Iterable<E>
|
|------- Set<E> extends Collection<E>
|
|------------ AbstractSet<E> extends AbstractCollection<E> implements Set<E>
|
|--------------- KeySet extends AbstractSet<K>

你似乎把这件事变得比必要的更复杂了。

Map 有一些键;它将以 Set 的形式向您展示这些键。

Set<> 必须实现 Set<> 接口,该接口具有 Iterable<> 作为子接口。因此,您可以获得 Set 上的迭代器。

既然它是一个迭代器,那么如果你迭代它,它最终会产生所有可能的键。即:

while (iterator.hasNext()) {
     key = iterator.Next(); // <<< this is the key
      :
}

但是你到底想做什么?

i'm studying about how i can get key by 'iterator' above is part of that

Map 和 Set 接口的要点是您可以直接通过键访问它们。

你当然可以做到。但是我从来不需要获取 keySet 迭代器。您只需执行以下操作即可。

Map<String, Object> map = new HashMap<>();
// later
for (String key : map.keySet()) {
   // so something with keys (e.g) print them.
   System.out.println(key);
}

不过你也可以这样做。

Iterator<String> it = map.keySet().iterator();
while(it.hasNext()) {
    System.out.println(it.next());
}