如何在不使用Iterator或set的情况下迭代Map?

时间:2012-02-10 06:41:10

标签: java collections interface map

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

在没有迭代器的情况下,我很难过。

修改

为了澄清,我的工作是在不使用这三种方法的情况下实现所有Map方法。关于如何在没有迭代器的情况下实现putAll()这样的方法,我感到很难过。

3 个答案:

答案 0 :(得分:0)

如果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的解释。

答案 1 :(得分:0)

来自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种方法之外别无他法

答案 2 :(得分:-2)

Map mp = new HashMap();
        Set s = mp.keySet();
        Iterator itr = s.iterator();
        while(itr.hasNext())
        {
            Object value = mp.get(itr.next());
        }

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