【问题标题】:How do I iterate over a Map without using an Iterator or set?如何在不使用迭代器或集合的情况下迭代地图?
【发布时间】:2012-03-02 16:27:30
【问题描述】:

在 Java 中,我尝试遍历映射以完成来自 Map 接口的 putAll() 方法的实现。但是,我不能使用keyset()entryset()values() 来执行此操作,这意味着我不能为此调用迭代器。

我不知道如何在没有迭代器的情况下进行操作。

编辑:

澄清一下,我的工作是在不使用这三个方法的情况下实现所有 Map 方法。我对如何在没有迭代器的情况下实现 putAll() 等方法感到困惑。

【问题讨论】:

  • 为什么不能使用这些方法?
  • 是你老师不让吗?
  • keySet()entrySet()values() 是在事先不知道密钥的情况下访问内容的唯一方法。要么这是一个技巧问题(答案:你不能),要么有一些其他信息你没有提供。另外,您应该添加homework 标签。
  • docs.oracle.com/javase/6/docs/api/java/util/Map.html - 除了您在Map 接口中提到的方法之外,没有其他方法可以遍历它。你确定你没有误解你的任务吗?
  • @so1201431 嘲讽? 在没有作业标签的情况下发布这样的问题是很糟糕的礼仪。

标签: java collections interface map


【解决方案1】:

如果MapSortedMap,那么您可以这样做:

SortedMap<K, V> partialMap = wholeMap;
while (!partialMap.isEmpty()) {
  K key = partialMap./* left as an exercise to the reader */;
  partialMap = partialMap.tailMap(
      key,
      false // exclusive, so does not include key
      );
}

你可以在javadoc中找到tailMap的解释。

【讨论】:

    【解决方案2】:

    来自 HashMap 代码:

    for (Iterator<? extends Map.Entry<? extends K, ? extends V>> i = m.entrySet().iterator(); i.hasNext(); ) {
                Map.Entry<? extends K, ? extends V> e = i.next();
                put(e.getKey(), e.getValue());
            }
    

    现在也许你应该解释一下为什么不能使用这样的迭代器。

    或者给我们实现代码,这样我们就可以看到您如何存储 KV 条目,也许我们可以在这方面提供更多帮助。只有使用 Map 接口的方法,除了限制使用的 3 种方法之外别无他法

    【讨论】:

      【解决方案3】:
      Map mp = new HashMap();
              Set s = mp.keySet();
              Iterator itr = s.iterator();
              while(itr.hasNext())
              {
                  Object value = mp.get(itr.next());
              }
      

      我不知道你为什么不能使用它。实现在上面的代码中完成。

      【讨论】:

      • -1,违反了问题中的明确限制。也没有泛型:-(
      猜你喜欢
      • 2013-07-28
      • 2014-12-27
      • 2018-03-21
      • 2011-04-16
      • 2019-01-12
      • 1970-01-01
      • 2018-12-31
      • 1970-01-01
      • 2014-08-07
      相关资源
      最近更新 更多