Java:与HashMap一起使用的密钥的最佳候选者
我已经声明如下HashMapJava:与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
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()
来抵消这一优势。