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