Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:与HashMap一起使用的密钥的最佳候选者_Java_Collections_Hashmap - Fatal编程技术网

Java:与HashMap一起使用的密钥的最佳候选者

Java:与HashMap一起使用的密钥的最佳候选者,java,collections,hashmap,Java,Collections,Hashmap,我已经声明如下HashMap Map Map=newhashmap();//Java 6+ 我有两个问题: A)是否存在任何问题(性能或其他),而我将元素放在HashMap中,其中包含上述声明HashMap的基本数据类型 例如 map.put(1,"abc"); 或者我只能使用 map.put(new Integer(1),"abc"); B)如果我把number(int)作为一个键,那么它是HashMap的一个很好的候选者 字符串或整数这实际上是相同的。Java正在使用自动装箱来转换 ma

我已经声明如下HashMap

Map Map=newhashmap();//Java 6+

我有两个问题:
A)是否存在任何问题(性能或其他),而我将元素放在HashMap中,其中包含上述声明HashMap的基本数据类型 例如

map.put(1,"abc");
或者我只能使用

map.put(new Integer(1),"abc");
B)如果我把number(int)作为一个键,那么它是HashMap的一个很好的候选者

字符串或整数

这实际上是相同的。Java正在使用自动装箱来转换

map.put(1,"abc");

在编译时


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

这实际上是相同的。Java正在使用自动装箱来转换

map.put(1,"abc");

在编译时


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

我认为您可以使用任何一个,但重要的是键最好不可更改,因为这可能导致异常行为

Java HashMap依赖于两件事:

  • 方法,该方法返回生成的整数 从钥匙开始,并在地图内部使用
  • equals(..)方法,该方法应与哈希一致 计算,这意味着如果两个键具有相同的哈希代码 他们必须是同一个元素

所以,如果您计划只使用简单类型作为键(如您所说的整数或字符串),请不要担心,这没有什么区别。在这两种情况下,两个不同的项将具有相同的哈希代码。

我认为您可以使用任何一个,但重要的是,key最好不可更改,因为这可能导致异常行为

Java HashMap依赖于两件事:

  • 方法,该方法返回生成的整数 从钥匙开始,并在地图内部使用
  • equals(..)方法,该方法应与哈希一致 计算,这意味着如果两个键具有相同的哈希代码 他们必须是同一个元素
所以,如果您计划只使用简单类型作为键(如您所说的整数或字符串),请不要担心,这没有什么区别。在这两种情况下,两个不同的项目将具有相同的哈希代码。

您应该使用

Integer.valueOf(1)
而不是使用新的关键字。Java将值-128到127存储在IntegerCache中,并将从堆返回已分配的值

至于原语v/s Integer对象,java在内部是双向的,所以它不会有什么区别。

您应该使用

Integer.valueOf(1)
而不是使用新的关键字。Java将值-128到127存储在IntegerCache中,并将从堆返回已分配的值


至于原语v/s Integer对象,java在内部是双向的,所以它不会有什么区别。

当您使用
map.put(1,“abc”)Integer.valueOf(8)
方法


至于性能问题,我建议您在使用
映射时参考Integer.valueOf(8)
方法


至于性能问题,我建议您参考

您不能将泛型与原语一起使用。由于自动装箱,您将以
整数
结束。事实上,自动装箱可能更快,因为您不会总是分配一个
新整数();您可以通过使用
Integer.valueOf()
而不是
newinteger()
来抵消这一优势。您不能将泛型与原语一起使用。由于自动装箱,您将以
整数
结束。事实上,自动装箱可能更快,因为您不会总是分配一个
新整数();您可以使用
Integer.valueOf()
而不是
newinteger()
来抵消这一优势。