ArrayList与LinkedList效率

时间:2017-05-20 11:03:04

标签: java arraylist linked-list

我有一个问题,在开始时使用列表中的许多插入,然后广泛使用搜索和检索操作,那么哪种方法是好的和有效的?

方法1: 使用LinkedList作为整个程序的数据结构。

方法2: 使用ArrayList作为整个程序的数据结构。

方法3: 在开始时使用LinkedList作为我的数据结构进行插入  Arraylist al = new Arraylist(ll); 用于检索操作。

数据结构的变化成本是多少?它真的值得吗?

3 个答案:

答案 0 :(得分:5)

由于它们都实现了相同的接口,因此您可以通过编写代码来自行查找,以便可以插入构造函数并以两种方式测试代码。可以使用jmh进行基准测试。

您可以使用Supplier界面插入构造函数。

根据问题的性质,您可能会发现使用Deque是合适的。

答案 1 :(得分:2)

它取决于插入和检索操作的频率。以下是复杂性:

  • ArrayList - >在开头插入: O(n)
  • ArrayList - >基于索引的检索: O(1)
  • LinkedList - >在开头插入: O(1)
  • LinkedList - >基于索引的检索: O(i)其中i是要扫描的元素数。

因此,如果您的检索数多于插入数,请转到ArrayList,如果没有,请转到LinkedList

答案 2 :(得分:2)

请允许我提出第4种方法:使用ArrayDeque进行整个计划。它在前面和后面有效插入(可能比LinkedList更快)和搜索效率,如ArrayListArrayDeque是Java Collections Framework中一个不公平被忽视的类,可能是因为它稍后被添加(我认为是Java 6)。 实现List接口,因此您必须专门为其编写程序。

除此之外,您问题的唯一两个有效答案是

  1. 在你绝对不得不担心效率之前不要担心。
  2. 如果您不得不担心效率问题,则必须自行衡量 环境中 数据的效果。这里没人能告诉你。