TreeMap <integer,string =“”>在java </integer,>中返回单个值

时间:2011-05-10 15:08:05

标签: 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 ......

6 个答案:

答案 0 :(得分:6)

因为通过将所有值映射到同一个键(1),您实际上会覆盖您的初始EntryThe Map javadoc

  

如果地图以前包含此键的映射,则旧值将替换为指定值

答案 1 :(得分:3)

您为同一个键设置了不同的值。而不是

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

使用

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

答案 2 :(得分:2)

这是因为您要覆盖同一个键的值。如果您使用了三个不同的键,您将获得所有三个值。例如,尝试更改为:

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

答案 3 :(得分:2)

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

    }

答案 4 :(得分:1)

地图不能包含重复键,因此您将替换“示例”和“example2”键。你可以实现一个Multimap来解决这个问题。

答案 5 :(得分:1)

这就是指定Map的方式:当您添加一个与现有对象具有相同键的对象时,前一个值将被覆盖。

Map's Javadoc开始:

  

地图不能包含重复的键;每个键最多可以映射一个值。