8

当然,我知道arraylist和linkedlist的性能差异。我自己进行了测试,发现对于一个非常大的列表,arraylist 和linkedlist 之间的插入/删除和迭代在时间和内存方面存在巨大差异。

(如果我错了,请纠正我)我们通常更喜欢 arraylist 而不是linkedlist,因为:

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

2)linkedlist的内存开销远大于arraylist

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

我对第三点错了吗[我希望如此:)]?是否有可能在一个列表中获得这两种数据结构的好处?我想,数据结构设计者一定已经考虑过了。

4

3 回答 3

1

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

于 2012-11-18T19:36:41.087 回答
0

您可能想查看 Clojure 的“向量”(这不仅仅是一个简单的数组):http ://blog.higher-order.net/2009/02/01/understanding-clojures-persistentvector-implementation /。它们是 O(log32 n) 用于查找和插入。

请注意,这些可以直接从 Java 中使用!(实际上,它们是用 Java 代码实现的。)

于 2012-11-18T19:40:31.487 回答
0

可能我们还有另一点需要考虑,但让我选择LinkedList而不是ArrayList的一个方面是:

  • 当我不需要按索引获取元素时(在处理所有元素的情况下)
  • 当我在创建列表时不知道大小时

这是一个关于这个话题的有趣宣言。

于 2018-12-14T12:33:35.087 回答