Java 列表接口(将linkedlist添加到列表列表)
我刚刚发现了这个代码Java 列表接口(将linkedlist添加到列表列表),java,list,arraylist,linked-list,Java,List,Arraylist,Linked List,我刚刚发现了这个代码 List<List<Integer>> parentList = new ArrayList<>(); LinkedList<Integer> curList = new LinkedList<>(); parentList.add(curList); List parentList=new ArrayList(); LinkedList curList=新建LinkedList(); parentList.ad
List<List<Integer>> parentList = new ArrayList<>();
LinkedList<Integer> curList = new LinkedList<>();
parentList.add(curList);
List parentList=new ArrayList();
LinkedList curList=新建LinkedList();
parentList.add(卷发列表);
我想我有点被甩了,因为我没想到你能将LinkedList添加到声明为列表的东西中。我想你应该做些类似的事情
List<Integer>curList = new LinkedList<>();
parentList.add(curList);
listcollist=newlinkedlist();
parentList.add(卷发列表);
我认为将LinkedList或ArrayList声明/初始化为列表的全部意义在于,即使它们实现为LinkedList和ArrayList,也可以将它们添加到列表中
编辑:或者我对这样一个事实感到困惑,我们把它作为一个抽象层来做——我们将它声明为一个列表,这样即使它由ArrayList和LinkedList组成,我们仍然可以在所有这些列表上使用相同的列表接口函数。我们可以将LinkedList添加到列表列表中,因为LinkedList只是实现了列表接口
LinkedList
extendsAbstractSequentialList
,后者依次扩展AbstractList
和ArrayList
extendsAbstractList
。
因此,底层的LinkedList
和ArrayList
都扩展了相同的子类。List
界面上的add
方法对添加类似类型的元素有限制。因此,LinkedList
和ArrayList
被认为是相似的,因此允许添加
另外,逻辑上添加LinkedList
不会改变其中元素的行为,因为即使添加到列表中,顺序也会保持不变。tl;博士
这:
LinkedListcurList=newlinkedlist();//curList=新链接列表();/>parentList
告诉我们,我们有一个Integer
对象列表
列表
,不一定是数组列表
或链接列表
curList
,只是一个Integer
对象的列表
- 我们从它的声明中知道这一点,
LinkedList
curList - 在这个声明中,我们说这个列表肯定是一个
,而不是任何其他类型的链接列表
列表
Integer
对象列表的对象。此外部列表为空
然后我们添加一个由三个单位数奇数(3、5、9)组成的列表。此不可修改列表由方法生成。List
的具体实现用于未承诺中的List
返回的对象,可能会根据情况和Java版本的不同而有所不同。我们可以肯定的是,我们得到了一些包含整数
对象的列表
的实现
然后我们创建一个LinkedList
来保存Integer
对象。在添加两个两位数数字后,我们将列表添加到外部列表中
以下是这段代码中让您感到困惑的关键点:
- 我们可以将这个
变量声明为更一般的curList
,而不是更具体的List
curList
。用于LinkedList
curList 卷发器的
的类型不相关。外部列表列表
表示它不关心将哪个parentList
实现添加为元素,只关心添加的元素是某种类型的list
,其中包含list
对象整数
- 我们可以决定,如果外部列表是
,而不是链接列表
,那么外部列表将得到更好的服务。如果我们这样决定,我们可以简单地更改数组列表
到List
- >parentList=newarraylist()
列表
- >父列表=新链接列表()代码>-其他代码都不会中断。我们可以在不更改任何其他代码的情况下,将
切换到newarraylist
。这就是我们的优势所在newlinkedlist
/*打包任何内容;//不要放置包名*/
导入java.util.*;
导入java.lang.*;
导入java.io.*;
/*只有当类是公共的时,类的名称才必须是“Main”*/
表意文字
{
公共静态void main(字符串[]args)引发java.lang.Exception
{
List>parentList=newarraylist();
parentList.add(List.of(3,5,9));/`List.of`returns*some*类(不可修改)`List`;我们不知道具体的类,也不关心。
LinkedListcurList=新建LinkedList();
卷发器。添加(21);
增加(42);
parentList.add(卷发列表);
System.out.println(父列表);
}
}
看这个
[3,5,9],[21,42]]
在该输出中,我们看到一个集合,一个包含两个元素的列表。每个元素本身就是一个列表
,一个整数
元素的列表。外部列表的第一个元素引用三个Integer
对象作为元素的列表,而外部列表的第二个元素引用两个Integer
对象作为元素的列表
你说:
我想我有点被甩了,因为我没想到你能将LinkedList添加到声明为列表的东西中
将某物(parentList
)声明为列表列表。您要传递的LinkedList
是一个列表
,因此它是匹配的类型。任何链接列表
也是一个列表
如果您希望外部列表(parentList
)仅包含ArrayList
对象,而不是任何类型的list
,则必须