【问题标题】:About HashMap collection's keySet() method关于 HashMap 集合的 keySet() 方法
【发布时间】:2020-07-01 01:12:10
【问题描述】:
Map<K, V> map = HashMap<K, V>();

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

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

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

但是[Set&lt;K&gt; keySet = map.keySet();]

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

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

【问题讨论】:

  • 我不明白你在问什么。 keySet() 方法被记录为返回一个实现 Set 的对象。您是在问具体的实现类是什么?
  • 找不到是什么意思?它就在Javadoc 中。

标签: java hashmap iterator keyset


【解决方案1】:

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

Map 有一些键;它会将这些键视为 Set

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

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

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

但你实际上想做什么?

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

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

【讨论】:

    【解决方案2】:

    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>
    

    【讨论】:

      【解决方案3】:

      你当然可以这样做。但我从来没有需要得到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());
      } 
      

      【讨论】:

        猜你喜欢
        • 2010-12-25
        • 2021-11-25
        • 1970-01-01
        • 2021-08-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-17
        • 1970-01-01
        相关资源
        最近更新 更多