#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 карты:
Карта не может содержать повторяющихся ключей; каждый ключ может соответствовать не более чем одному значению.