LinkedList和ArrayList实现的区别?

可能重复:
何时通过ArrayList <>使用LinkedList <>?

我看到了ArrayList和LinkedList的API,它看起来是一样的。 除了它们的性能差异之外,在添加,删除和迭代列表方面还有什么不同。

List arrList = new ArrayList();

List linList = new LinkedList();

List arrList or linList引用实际上正在实现相应的类。 这实际上意味着什么?


当你问到“这究竟是什么意思?”时,我不是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();
    }
}

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

因此,在你的例子中,List接口中的任何方法都可以被arrList和linList访问,但是除了List接口之外,他们提供的任何方法都不会被调用,而无需强制转换。 你可以(也应该在大多数情况下)把ArrayList和LinkedList当作List来处理。

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


就你的第一个问题而言:它们的性能和内存使用情况对你来说唯一的区别(第三个,它们的实际实现细节不是你关心的问题) LinkedList使用更多的内存,从头部走过名单的第二十二个元素非常缓慢; 但就添加和删除列表中的元素而言,它们非常棒。 ArrayList使用更少的内存,获得第22个元素的速度非常快 - 但在中间插入或移除元素需要的时间与列表大小成正比。

至于你的第二个问题:引用是“实际执行列表”的说法是错误的,所以我不知道如何回答它。 引用变量是指实现List接口的对象; 这两个类都实现了这个接口,所以List类型的引用可以引用任何一个类的对象。


Java教程中对这两个List实现的优缺点进行了很好的讨论。 请参阅列表实现的主题。

链接地址: http://www.djcxy.com/p/19965.html

上一篇: Difference in LinkedList and ArrayList implementation?

下一篇: Insertion in the middle of ArrayList vs LinkedList