Как перебрать карту без использования итератора или набора? - PullRequest
2 голосов
/ 10 февраля 2012

В Java я пытаюсь перебрать карту, чтобы завершить реализацию метода putAll() из интерфейса Map. Однако я не могу использовать keyset(), entryset() или values() для этого, что означает, что я не могу вызвать итератор для этой цели.

Я не знаю, как это сделать без итератора.

Edit:

Просто чтобы уточнить, моя работа состоит в том, чтобы реализовать все методы Map без использования этих трех. Я озадачен тем, как реализовать такие методы, как putAll() без итератора.

Ответы [ 3 ]

0 голосов
/ 10 февраля 2012

Если Map является SortedMap, то вы можете сделать это:

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
      );
}

Вы можете найти объяснение tailMap в javadoc .

0 голосов
/ 10 февраля 2012

Из кода 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 методами, которые вы можете использовать

0 голосов
/ 10 февраля 2012
Map mp = new HashMap();
        Set s = mp.keySet();
        Iterator itr = s.iterator();
        while(itr.hasNext())
        {
            Object value = mp.get(itr.next());
        }

Понятия не имею, почему вы не можете его использовать. Реализация осуществляется в приведенном выше коде.

...