将整数插入TreeMap

时间:2011-06-28 06:50:02

标签: java treemap

我想存储项目的ID及其相应的坐标。为此,我使用的是TreeMap,其中Coordinates是一个包含int x和int y的类。现在,为了将数据插入地图,我可以写:

treeMapObject.put(5,new BasicRow(30,90));

或者我必须写:

treeMapObject.put(new Integer(5),new BasicRow(30,90));

我猜只有第二个是正确的,因为Maps处理对象。但现在的问题是,我说有以下代码:

treeMapObject.put(new Integer(5),new BasicRow(30,90));
treeMapObject.put(new Integer(5),new BasicRow(45,85));

在这种情况下会发生什么?

3 个答案:

答案 0 :(得分:7)

实际上两个版本都是正确的,因为您的Java编译器将为您执行所谓的“自动装箱”:如果您提供需要Integer的int,则java会自动将该int包装在Integer对象中。反过来也是如此(已在Java 5中引入。如果您使用的是不能编译的旧Java版本。)。

对于第二个问题:您首先添加的条目将被覆盖。

答案 1 :(得分:1)

yankee是对的,两者都有效,因为Java会将整数值autobox变成Integer对象。

请注意,如果您想明确地这样做,最好写一下:

Integer a = Integer.valueOf(5);

而不是:

Integer a = new Integer(5);

如果您使用valueOf,则类Integer可以避免创建新的Integer对象,它将从其内部缓存返回预先存在的Integer对象,比创建新对象更有效。

答案 2 :(得分:0)

存在细微差别,不会影响地图的行为。在这两种情况下,如果您尝试获取整数5的值,则地图将返回该基本行。

区别:第二行将始终创建Integer的新实例,而第一行可以插入现有实例。但地图比较相等,而不是 identity ,所以实际上并不重要。只是第一行对内存消耗有非常小的积极影响。