Java 声明列表并将其分配给LinkedList或ArrayList时,是否仍保留了不同的性能优势?

Java 声明列表并将其分配给LinkedList或ArrayList时,是否仍保留了不同的性能优势?,java,list,Java,List,采用以下两行代码: List<String> listOfStrings = new ArrayList<>(); List<String> listOfStrings2 = new LinkedList<>(); List listofstring=new ArrayList(); List listOfStrings2=新建LinkedList(); 我知道编程到接口是一个很好的实践,但是作为一个新手,我试图理解,因为我们只能在这两个实例

采用以下两行代码:

List<String> listOfStrings = new ArrayList<>();

List<String> listOfStrings2 = new LinkedList<>();
List listofstring=new ArrayList();
List listOfStrings2=新建LinkedList();

我知道编程到接口是一个很好的实践,但是作为一个新手,我试图理解,因为我们只能在这两个实例上调用
List
方法,它们是否仍然像
ArrayList
s或
LinkedList
s那样“行为”(就像它们在排序/添加等时执行各自的类一样)

是的,它们的行为确实类似于ArrayList或LinkedList,您可以使用它保存更多不同的列表(或您自己的对象),并在迭代数组时调用超类方法的不同实现。

LinkedList和
ArrayList
实现的
列表
集合
Iterable
。。。接口,但它们有不同的方法实现(如
add()
remove()
,等等)。调用这些方法时,
Arraylist
LinkedList
将因实现不同而具有不同的行为/性能。

变量的类型不会更改对象的类型。它们不仅“表现”像ArrayList或LinkedList,它们仍然是ArrayList或LinkedList。我想让我困惑的是,既然你只能调用列表方法,我不确定它们到底是什么,谢谢你的澄清。@AntonyChristodoulou你可以把接口看作是一种“契约”。这是一种表达方式,“我保证,无论这实际上是什么类型的对象,它都会公开此方法列表供您使用。”这些方法背后的实际逻辑与接口无关,只要它遵守合同。谢谢@Jordan。现在你提醒了我接口的用途这个语法现在完全有意义了。我建议你花点时间通读一遍。里面有很多很好的信息。