Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 列表接口(将linkedlist添加到列表列表)_Java_List_Arraylist_Linked List - Fatal编程技术网

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
extends
AbstractSequentialList
,后者依次扩展
AbstractList
ArrayList
extends
AbstractList
。 因此,底层的
LinkedList
ArrayList
都扩展了相同的子类。
List
界面上的
add
方法对添加类似类型的元素有限制。因此,
LinkedList
ArrayList
被认为是相似的,因此允许添加

另外,逻辑上添加
LinkedList
不会改变其中元素的行为,因为即使添加到列表中,顺序也会保持不变。

tl;博士 这:

LinkedListcurList=newlinkedlist();//curList=新链接列表();/>parentList
告诉我们,我们有一个
Integer
对象列表
  • 外部列表和内部列表都可以是任何类型的
    列表
    ,不一定是
    数组列表
    链接列表
  • 您的第二个集合,
    curList
    ,只是一个
    Integer
    对象的列表

    • 我们从它的声明中知道这一点,
      LinkedListcurList
    • 在这个声明中,我们说这个列表肯定是一个
      链接列表
      ,而不是任何其他类型的
      列表
    这里有一个完整的例子

    首先,我们制作一个包含
    Integer
    对象列表的对象。此外部列表为空

    然后我们添加一个由三个单位数奇数(3、5、9)组成的列表。此不可修改列表由方法生成。
    List
    的具体实现用于未承诺中的
    List
    返回的对象,可能会根据情况和Java版本的不同而有所不同。我们可以肯定的是,我们得到了一些包含
    整数
    对象的
    列表
    的实现

    然后我们创建一个
    LinkedList
    来保存
    Integer
    对象。在添加两个两位数数字后,我们将列表添加到外部列表中

    以下是这段代码中让您感到困惑的关键点:

    • 我们可以将这个
      curList
      变量声明为更一般的
      ListcurList
      ,而不是更具体的
      LinkedListcurList
      。用于
      卷发器的
      列表
      的类型不相关。外部列表
      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
    ,则必须