2008-09-24 7 views

ответ

14

Нет, не обязательно. Для этой цели вам действительно нужно использовать функцию entrySet(). Iterator(). С помощью этого итератора вы пройдете через все объекты Map.Entry на карте и сможете получить доступ к каждому ключу и связанному с ним значению.

0

Вопрос путал меня сначала, но @Matt очистил его для меня.

Рассмотрите возможность использования метода entrySet(), который возвращает набор с парами ключ-значение на карте.

Map<Integer, Integer> a = new HashMap<Integer, Integer>(2); 
a.put(1, 2); 
a.put(2, 3); 
for (Map.Entry<Integer, Integer> entry : a.entrySet()) { 
    System.out.println(entry.getKey() + " => " + entry.getValue()); 
} 

Это выходы:

1 => 2 
2 => 3 
3 => 3 
+0

Я думал, что это то, о чем вначале речь шла, но звучит так, будто он итерации по ключам и значениям независимо использует методы .keys() и .values ​​(). Я не думаю, что LinkedHashMap решает проблему в этом случае – Matt 2008-09-24 16:04:13

+0

Спасибо Мэтту - меня там путают :). – 2008-09-24 16:06:07

+0

С другой стороны, вы никогда не должны создавать HashMap того же размера, что и количество ожидаемых элементов. У HashMaps есть loadfactor, который обычно составляет 75%. Это означает, что если карта заполнена на 75%, и вы добавите элемент, это увеличит ее размер. – 2008-09-24 18:42:30

2

Оба значения() и keySet() делегируют итератору entrySet(), поэтому они будут возвращены в том же порядке. Но, как говорит Алекс, гораздо лучше использовать итератор entrySet().

8

использовать entrySet, что @Cuchullain отметил:

Map<String, String> map = new HashMap<String, String>(); 

// populate hashmap 

for (Map.Entry<String, String> entry : map.entrySet()) { 
    String key = entry.getKey(); 
    String value = entry.getValue(); 
    // your code here 
} 
0

Я второй @basszero. Пока

for (Map.Entry<Integer, Integer> entry : a.entrySet()) 

будет работать, я нахожу использование структуры данных, которая делает это автоматически более приятным. Теперь вы можете просто переименовать «обычно»

0

Метод keySet HashMap возвращает набор, который не гарантирует порядок.
Метод value() метода HashMap возвращает коллекцию, которая не гарантирует порядок.

Тем не менее, вопрос был «они будут коррелировать», так что технически ответ может быть, но не полагаться на него.

1

Я согласен с pmac72. Не предполагайте, что вы получите упорядоченные значения или ключи из неупорядоченной коллекции. Если это время от времени, это просто чистая опасность. Если вы хотите, чтобы заказ сохранялся, используйте привязку LinkedHashMap или TreeMap или коллекцию CommonsMap.

3
public class Test { 
public static void main(String[] args) { 
    HashMap <String,String> hashmap = new HashMap<String,String>(); 
    hashmap.put("one", "1"); 
    hashmap.put("two", "2"); 
    hashmap.put("three", "3"); 
    hashmap.put("four", "4"); 
    hashmap.put("five", "5"); 
    hashmap.put("six", "6"); 

    Iterator <String> keyIterator = hashmap.keySet().iterator(); 
    Iterator <String> valueIterator = hashmap.values().iterator(); 

    while(keyIterator.hasNext()) { 
    System.out.println("key: "+keyIterator.next()); 
    } 

    while(valueIterator.hasNext()) { 
    System.out.println("value: "+valueIterator.next()); 
    } 
} 
} 

key: two 
key: five 
key: one 
key: three 
key: four 
key: six 
value: 2 
value: 5 
value: 1 
value: 3 
value: 4 
value: 6 

 Смежные вопросы

  • Нет связанных вопросов^_^