【发布时间】:2019-01-28 05:06:28
【问题描述】:
在下面的代码中,我有一个查询的结果,但我不知道记录的总数。我必须将它存储在一个容器中。当我读取容器的每条记录时,这将是一个简单的循环,因此不会使用基于索引的访问。
List<MyObject> list;
while ( source.hasNext() ) {
MyObject ob = new MyObject();
convertObject(ob, source.next());
list.add(ob);
}
...
//Another method
for (MyObject ob : objects){
showThings(ob);
}
LinkedList 很差,因为它创建了许多带有指向下一个对象的指针的小对象。它使用更多的内存,使内存更加碎片化并且有更多的缓存未命中。
ArrayList 很差,因为我不知道要插入的记录数。每当我插入一个新项目并且内部数组已满时,它会分配一个更大的内存块并将所有内容复制到新块中。
我在 java.util 中没有找到任何解决方案。所以我考虑写一个自定义列表。它就像一个 LinkedList,但每个单元格都是一个数组。换句话说,第一个节点就像一个 ArrayList,但是当它已满并且我插入一个新对象时,它将创建另一个带有数组的节点来插入新项目,而不是复制所有内容。但是,我可能会以某种方式重新发明轮子。
【问题讨论】:
-
您对 ArrayList 的具体问题是什么?表现?内存?
-
ArrayList 在空间不足时会产生移动记录的开销。
-
GlueList,我不知道存在,是解决方案。谢谢,这就是答案。
-
解决方案是什么? ArrayList 有什么问题?
标签: java performance data-structures containers