我已声明遵循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的合适人选 字符串或整数
答案 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依赖于两件事:
因此,如果您打算仅使用简单类型作为键(就像您说的整数或字符串一样),请不要担心,没有区别。在这两种情况下,两个不同的项将具有相同的哈希码。
答案 3 :(得分:0)
当您使用map.put(1,"abc");
时,java编译器在内部使用Integer.valueOf(8)
方法
至于效果问题,建议您参考String as key in hashmap