“两个”arraylist和linkedlist的好处......可能在java中?

时间:2012-11-18 19:01:15

标签: java data-structures arraylist linked-list complexity-theory

当然,我知道arraylist和linkedlist之间的性能差异。我自己运行了测试,看到了arraylist和linkedlist之间插入/删除和迭代的时间和内存的巨大差异。

(纠正我,如果我错了)我们一般更喜欢arraylist而不是链表,因为:

1)我们实际上比插入/删除更频繁地进行迭代。所以我们更喜欢迭代比插入/删除更快。

2)链表的内存开销远远超过了arraylist

3)没有办法在批量插入/删除时将列表定义为链表,在迭代时作为arraylist。这是因为arraylist和linkedlist具有根本不同的数据存储技术。

我错了第3点[我希望如此:)]?是否有可能将这两个数据结构的好处放在一个列表中?我想,数据结构设计师必须考虑过它。

3 个答案:

答案 0 :(得分:1)

如果您正在寻找更高效的集合实现,请查看Javolution。该软件包提供了FastListFastTable,这可能至少可以降低在链接列表和数组列表之间进行选择的成本。

答案 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