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

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

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

我正在研究如何通过“迭代器”获取密钥。上面的代码就是其中的一部分。

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

不就是那个方法就是重定义接口的HashMap方法吗?keySet()Set keySet()HashMap

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

4

3 回答 3

1

您似乎使这比必要的复杂。

Map<K,V> 有一些键;它会将这些键的视图视为 Set<K>。

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

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

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

但你实际上想做什么?

我正在研究如何通过上面的“迭代器”获取密钥是其中的一部分

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

于 2020-07-01T01:50:24.340 回答
0

你当然可以这样做。但我从来不需要获取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());
} 
于 2020-07-01T02:27:46.050 回答
0

keySet()方法返回一组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>
于 2020-07-01T01:48:14.363 回答