【问题标题】:ArrayList and List JavaArrayList 和列表 Java
【发布时间】:2014-10-22 14:02:23
【问题描述】:

我有一个老师的 java 文件,我发现以下几行我不太理解的代码。我知道他声明了一个 ArrayList ,其中每个元素都是一个整数列表?什么是列表?一个数组列表?链表?谢谢!

ArrayList<List<Integer>>L=new ArrayList<List<Integer>>();
ArrayList<Integer>l=new ArrayList<Integer>();

【问题讨论】:

标签: java list arraylist


【解决方案1】:

转过javadocs 会是一件好事,也许比这个答案更有价值。

如果您要编写 Java,则需要知道如何研究 javadocs。

找到java.util 包。你会看到ListArrayList 在那里定义。前者是接口,后者是实现List 接口的具体类,使用支持数组作为其实现。

我建议你和你的教授更喜欢这个:

List<List<Integer>> listOfLists = new ArrayList<List<Integer>>();
List<Integer> l = new ArrayList<Integer>();
listOfLists.add(l);

原因是首选接口类型允许您在不影响客户端代码的情况下替换其他实现。

【讨论】:

    【解决方案2】:

    List 是 ArrayList 和 LinkedList 以及实现 List 的任何其他类型的列表的接口类。 ArrayList 是一个通用列表,它使用数组来存储对象。 LinkedList 是一个通用列表,它使用节点来存储对象。每种类型的列表都必须从 List 接口实现某些方法。每种类型的列表都有其优点和缺点。您可能想查找 LinkedLists 和 ArrayLists 之间的区别。 Here is a link that might help you.

    【讨论】:

      【解决方案3】:

      在查看代码之前,您必须了解接口和实现之间的区别。来自Wikipedia

      Java 编程语言中的接口是一种抽象类型, 用于指定接口(在该术语的一般意义上) 该类必须实现。接口使用声明 interface 关键字,只能包含方法签名和常量 声明(声明为两者的变量声明 静态和最终)。接口的所有方法都不包含 JAVA 8 以下所有版本的实现(方法体)。 从 Java 8 开始,默认和静态方法可能有 接口定义中的实现。1

      一旦你理解了实现和接口之间的区别,这两个声明就变得更容易理解了。让我们先从第二条语句开始——它更直接:

      ArrayList<Integer>l=new ArrayList<Integer>();
      

      在这里,您将l 声明为接受Integer 对象的ArrayList。所以最终的用途是这样的:

      l.add( new Integer(1) );
      

      如果你遵循这个逻辑,那么你可以看到另一行是相同的构造:

      ArrayList<List<Integer>>L=new ArrayList<List<Integer>>();
      

      在这里,您将L 定义为接受List&lt;Integer&gt; 对象的ArrayListList 是 Java 中的一个接口——可以有不同类型的实现。例如:LinkedList、ArrayList 等。实际的实现与声明无关。因此,鉴于 ArrayList 实际上是一个 List,您可以看到 L 可以包含 l 的实例,因为 lList&lt;Integer&gt;

      所以第二个列表的最终用途是:

      L.add(l);
      

      事实上,如果你想更进一步,你可以这样做:

      List<Integer> linkedList = new LinkedList<Integer>();
      List<Integer> vector = new Vector<Integer>();
      

      并将它们全部添加到同一个 L 列表中,因为它们都实现了 List&lt;Integer&gt; 接口:

      L.add(linkedList);
      L.add(vector);
      

      【讨论】:

        猜你喜欢
        • 2014-12-28
        • 2022-06-12
        • 2012-08-28
        • 1970-01-01
        • 2016-11-18
        • 2019-03-17
        • 2017-10-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多