当然,我知道arraylist和linkedlist之间的性能差异。我自己运行了测试,看到了arraylist和linkedlist之间插入/删除和迭代的时间和内存的巨大差异。
(纠正我,如果我错了)我们一般更喜欢arraylist而不是链表,因为:
1)我们实际上比插入/删除更频繁地进行迭代。所以我们更喜欢迭代比插入/删除更快。
2)链表的内存开销远远超过了arraylist
3)没有办法在批量插入/删除时将列表定义为链表,在迭代时作为arraylist。这是因为arraylist和linkedlist具有根本不同的数据存储技术。
我错了第3点[我希望如此:)]?是否有可能将这两个数据结构的好处放在一个列表中?我想,数据结构设计师必须考虑过它。
答案 0 :(得分:1)
如果您正在寻找更高效的集合实现,请查看Javolution。该软件包提供了FastList和FastTable,这可能至少可以降低在链接列表和数组列表之间进行选择的成本。
答案 1 :(得分:0)
你可能想要了解Clojure的“向量”(它不仅仅是一个简单的数组):http://blog.higher-order.net/2009/02/01/understanding-clojures-persistentvector-implementation/。它们是O(log32 n)用于查找和插入。
请注意,这些可直接从Java使用! (实际上,它们是用Java代码实现的。)
答案 2 :(得分:0)
也许我们还有其他要考虑的地方,但是让我选择LinkedList而不是ArrayList的一个方面是:
这里有一个有趣的manifesto。