TreeMap возвращает единственное значение в java

#java

#java

Вопрос:

 TreeMap<Integer, String> map = new TreeMap<Integer, String>();

    map.put(1, "example");
    map.put(1, "example2");
    map.put(1, "example3");

    Iterator<Integer> itr = map.keySet().iterator();

    while (itr.hasNext()) {
        Object obj = itr.next();
        System.out.println(map.get(obj));

    }
  

Оно всегда возвращается "example3" . Могу я узнать почему? Почему я не могу получить все значения?
Как упорядочены ключи в Treemap ? Ключи должны быть от 0,1,2…

Ответ №1:

Потому что, сопоставляя все значения одному и тому же ключу (1), вы эффективно перезаписываете свой исходный Entry . В Map javadoc указано

Если карта ранее содержала сопоставление для этого ключа, старое значение заменяется указанным значением

Ответ №2:

Вы вводите разные значения для одного и того же ключа. Вместо

 map.put(1, "example");
map.put(1, "example2");
map.put(1, "example3");
  

используйте

 map.put(1, "example");
map.put(2, "example2");
map.put(3, "example3");
  

Ответ №3:

Это потому, что вы перезаписываете значение для того же ключа. Если бы вы использовали разные ключи для трех, вы бы получили все три значения. Например, попробуйте изменить на:

 map.out(1, "example");
map.out(2, "example2");
map.out(3, "example3");
  

Ответ №4:

 TreeMap<Integer, String> map = new TreeMap<Integer, String>();

    map.put(1, "example"); /*FIXED*/
    map.put(2, "example2"); /*FIXED*/
    map.put(3, "example3"); /*FIXED*/

    Iterator<Integer> itr = map.keySet().iterator();

    while (itr.hasNext()) {
        Object obj = itr.next();
        System.out.println(map.get(obj));

    }
  

Ответ №5:

Карты не могут иметь повторяющихся ключей, поэтому вы заменяете ключи «example» и «example2». Вы могли бы реализовать Multimap, чтобы обойти это.

Ответ №6:

Это указано следующим образом Map : когда вы добавляете объект с тем же ключом, что и существующий, предыдущее значение перезаписывается.

Прямо из Javadoc карты:

Карта не может содержать повторяющихся ключей; каждый ключ может соответствовать не более чем одному значению.