arraylist Java:我应该使用什么类型作为可调整大小的原语列表?
我想要一个对象,它是一个可调整大小的byte
列表,实现以下接口:
- 获取当前大小
- 清除列表(将大小重置为零)
- 在末尾添加一个
byte
- 从末尾删除一个
byte
- 通过索引获取任意元素的值
此外,众所周知,此列表不需要包含超过21个元素
我已经将这个对象实现为一个数组,大小为21的byte[]
,以及一个int
,它给出了下一个尚未填充的元素的索引,并且使用它非常成功
这似乎是一个简单的实现,但java是否已经有了这类东西的内置类型?我想这种事情的必要性是极其普遍的。我尝试使用ArrayList<Byte>
,但它非常慢,而且我的运行时随着迭代次数呈指数级扩展。我是否遭受装箱/拆箱性能损失?我应该使用哪种内置类型作为可调整大小的灵长类动物列表
# 1 楼答案
如果允许使用外部库,则可以使用HPPC(Java的高性能原语集合)。它支持所有Java原语的列表、集合和映射
在处理这些要求时,你必须做出妥协。我建议找到最常用的操作,并据此选择支撑结构
# 2 楼答案
标准Java不提供任何基元类型的集合
但是编译器为你做了很多自动装箱;而且有很好的助手方法,所以从
byte[]
到List<Byte>
可能不需要太多工作但你似乎发现了这样的代码的一个大问题:它带来了性能成本。但这不能通过在这样一个通用的层面上讨论来评估
长话短说:如果您的环境允许您使用推荐的第三方库之一。。。试试看。如果没有,您必须了解CPU周期的来源:
a)通过分析
或者
b)通过广泛的审查(如果你身边有一些目光敏锐的同事——向他们展示你的代码;然后你试图找出(联合国)拳击比赛发生的地方;以及如何避免)
如果“内部审查”不适合你,你可以求助于codereview。斯塔克交换。com
# 3 楼答案
正如其他人已经说过的,标准Java不支持原始集合。如果您对第三方库开放,Eclipse Collections^{} 将支持您指定的需求列表
注意:我是Eclipse集合的提交者