LinkedList和ArrayList实现的区别?

the*_*ava 8 java

可能重复:
何时在ArrayList <>上使用LinkedList <>?

我看到了ArrayList和LinkedList的API,它似乎是相同的。除了它们的性能差异外,在添加,删除和迭代列表方面也存在差异。

List arrList = new ArrayList();

List linList = new LinkedList();
Run Code Online (Sandbox Code Playgroud)

List arrList or linList引用实际上是在实现相应的类。这到底是什么意思?

Tof*_*eer 2

当您问“这实际上意味着什么?”时,我不能 100% 确定您的意思,但这是一个猜测。

考虑这样的代码:

interface Interface
{
   void foo();
}

class Implementation
    implements Interface
{
    public void foo() { }
    public void bar() { }
}

public class Main
{
    public static void main(final String[] argv)
    {
        Interface a;
        Implementation b;

        a = new Implementation();
        b = a;

        a.foo();
        b.foo();
        a.bar(); <-  won't compile
        b.bar();
    }
}
Run Code Online (Sandbox Code Playgroud)

接口a;实施b;两者都指向同一个对象,但只有对“b”的引用才能访问“bar”方法。

因此,在您的示例中,arrList 和 linList 都可以访问 List 接口中的任何方法,但是除了 List 接口之外,它们提供的任何方法在没有强制转换的情况下都无法调用。您可以(并且在大多数情况下应该)将 ArrayList 和 LinkedList 视为 List。

对于从不同列表中插入/添加/删除的细节,您通常不应该关心。从最终结果的角度来看,两者的行为方式相同(例如,使用相同数据的相同方法调用序列将导致相同的结果,只是内部布局不同)。