Java:与HashMap一起使用的密钥的良好候选者

时间:2014-06-13 05:52:02

标签: java collections hashmap

我已声明遵循HashMap

Map<Integer,String> map = new HashMap<>(); // Java 6+

我有两个问题:
A)是否有任何问题(效果或其他),而我在HashMap中使用原始数据类型将元素放在上面声明HashMap 例如

map.put(1,"abc");

或者我只能使用

map.put(new Integer(1),"abc");

B)如果我将数字(int)作为关键字,哪个是HashMap的合适人选    字符串或整数

4 个答案:

答案 0 :(得分:2)

你应该使用

Integer.valueOf(1)

而不是使用new关键字。 Java在IntegerCache中存储-128到127的值,并将从堆中返回已分配的值。

对于原始v / s Integer对象,java内部autoboxes两种方式,所以它不会有所作为。

答案 1 :(得分:1)

这实际上是一样的。 Java正在使用自动装箱转换

map.put(1,"abc");

map.put(Integer.valueOf(1),"abc");

在编译期间。

如果您需要更好的性能,请查看支持primivites的外部库作为地图中的关键。

答案 2 :(得分:1)

我认为你可以使用任何一个,但重要的是关键应该最好不要变,因为这会导致异常行为。

Java HashMap依赖于两件事:

  • hashCode()方法,返回生成的整数 来自密钥并在地图中使用
  • equals(..)方法,它应该与哈希一致 计算,这意味着如果两个键具有相同的哈希码 很可取,他们是同一个元素。

因此,如果您打算仅使用简单类型作为键(就像您说的整数或字符串一样),请不要担心,没有区别。在这两种情况下,两个不同的项将具有相同的哈希码。

答案 3 :(得分:0)

当您使用map.put(1,"abc");时,java编译器在内部使用Integer.valueOf(8)方法

至于效果问题,建议您参考String as key in hashmap