繁体   English   中英

为什么Map中的键必须是对象而不是基元,为什么我不能将原始类型用作映射中的键

[英]Why does a key in a Map must be an object and not a primitive and Why cant i use primitive type as key in a map

我有一张地图: Map abc = new HashMap() 为什么我只强制使用对象作为键而不是原语?

在java中,基元和对象/类之间存在很大的差异。

当您定义一个以ObjectObject作为参数的方法时,您也可以传递一个String或一个AbstractSingletonFactoryFacade 但是你不能传递原语。 没有办法抽象出多个原语。 这与泛型没有变化。

人们可以做的是定义接受(并返回)各种原语的单独接口。 虽然这对于像List这样只有一个类型参数的东西是可行的,但对于具有两个类型参数的Map,最终会有81个接口( 8个基本类型 + Object平方)。 这不值得麻烦。

当然,大多数时候这并不重要,因为Autoboxing在大多数情况下都会使问题不可见。

至于原因:Map的实现需要Object键(使用equals()函数)来(有效地)排序/存储您的值以便快速检索。 基元没有equals()函数,因此不适合该任务。 (这基本上是@MadProgrammer所建议的,除了在定义中使用equals ,而hashCode对于可能的实现是可选的 )。

然而,没有理由不能编程这个:事实上你可以说原语具有最简单的等式和hashCodes来计算! 这可能是什么在做TIntArrayList通过纳伦德拉Pathai的建议。 正如Jens Schauder所说:这不值得麻烦,也因为自动装箱大部分时间都隐藏了你的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM