我在接受采访时问了这个问题.
我知道原始类型将被转换为包装类对象以存储在任何数据结构中.
但是面试官问我,我不希望它成为一个包装类对象,它应该存储为原始类型.
我们怎么做?
使用Java的Collection API,您无法以合理的方式执行此操作.当然你可以自己实现List或Map接口并决定存储基元而不是对象,但这会让你头疼.Java的集合接口都是基于对象(泛型甚至不发挥一个角色),所以你不能有一个add或remove接受一个int作为参数的方法.
假设您有自己的List<Integer>存储实现int而不是Integer接口定义,您可以编写如下内容:
List<Integer> intList = new MyPrimitiveImplementation<>();
intList.add(42);
Run Code Online (Sandbox Code Playgroud)
现在发生的是原始int 42被自动装箱到一个Integer对象,因为Collection接口将add方法定义为add(Integer e).然后,您的实现可能会Integer再次取消装箱对象,以便恢复原语.
所以,真的没有意义.您要么遇到严重的性能问题(想象上面的自动装箱发生了几百万次),或者您失去了与Collections API的兼容性.两者都不可取.
| 归档时间: |
|
| 查看次数: |
9896 次 |
| 最近记录: |