首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将基元类型作为值而不是包装类对象存储在Hashmap或list中

如何将基元类型作为值而不是包装类对象存储在Hashmap或list中
EN

Stack Overflow用户
提问于 2014-12-16 09:35:16
回答 5查看 19.4K关注 0票数 4

这个问题是在一次面试中向我提出的。

我知道原语类型将被转换为包装类对象,以存储在任何数据结构中。

但是面试官问我,我不希望它是一个包装类对象,它应该以原始类型存储。

我们怎么能做到呢?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-12-16 10:11:55

使用Java的Collection API,您不能明智地这样做。当然,您可以自己实现ListMap接口,并决定存储原语而不是对象,但这无论如何都会让您头疼。Java的集合接口都是基于对象的(泛型甚至不起作用),所以不能有以int作为参数的addremove方法。

假设您有自己的List<Integer>实现,它存储int而不是接口定义的Integer,您可以编写如下内容:

代码语言:javascript
复制
List<Integer> intList = new MyPrimitiveImplementation<>();
intList.add(42);

现在,原语int 42被自动装箱到Integer对象,因为Collection接口将add方法定义为add(Integer e)。然后,您的实现可以做的是再次解除对Integer对象的装箱,以获得原语。

所以,这真的没有意义。您要么会遇到严重的性能问题(假设上面的自动装箱发生了几百万次),要么您就失去了与Collections的兼容性。两者都是不受欢迎的。

票数 8
EN

Stack Overflow用户

发布于 2014-12-16 09:50:44

您可以任意实现接口ListSetMap。因此,编写List<Integer>的实现是完全可能的,例如,所有项都以原始int值的形式在内部存储。但是,如果您使用这些接口的最常见实现(ArrayListHashSetHashMap),所有的值都将在内部存储为Objects (包括Integer之类的装箱原语以及int[]之类的数组类型)。

票数 2
EN

Stack Overflow用户

发布于 2014-12-16 09:37:04

您可以将其放入基元类型的数组中。

对于int值,

代码语言:javascript
复制
List<int[]> list = new ArrayList<int[]>()

然后把它和

代码语言:javascript
复制
list.add(new int[]{value});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27501448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档