我看到了ArrayList和LinkedList的API,它似乎是相同的。除了它们的性能差异外,在添加,删除和迭代列表方面也存在差异。
List arrList = new ArrayList();
List linList = new LinkedList();
Run Code Online (Sandbox Code Playgroud)
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();
}
}
Run Code Online (Sandbox Code Playgroud)
接口a;实施b;两者都指向同一个对象,但只有对“b”的引用才能访问“bar”方法。
因此,在您的示例中,arrList 和 linList 都可以访问 List 接口中的任何方法,但是除了 List 接口之外,它们提供的任何方法在没有强制转换的情况下都无法调用。您可以(并且在大多数情况下应该)将 ArrayList 和 LinkedList 视为 List。
对于从不同列表中插入/添加/删除的细节,您通常不应该关心。从最终结果的角度来看,两者的行为方式相同(例如,使用相同数据的相同方法调用序列将导致相同的结果,只是内部布局不同)。