【问题标题】:Difference between ArrayList declarationsArrayList 声明之间的区别
【发布时间】:2020-04-20 20:06:11
【问题描述】:

我在网上阅读时看到ArrayList 的声明

ArrayList[] graph = new ArrayList[numCourses];

传统上,我认为ArrayLists 总是被声明为

ArrayList<type> graph = new ArrayList<type>();

这两者有什么区别?其余代码似乎使用了 ArrayList 类中的相同函数,但具有特定的索引。

【问题讨论】:

  • 第一个声明了一个原始ArrayLists的数组:第二个声明了一个ArrayList&lt;type&gt;
  • @VishwaRatna 他询问了问题中两个声明之间的区别。无需思考。

标签: java arrays list generics arraylist


【解决方案1】:

ArrayList[] 声明了一个 ArrayList 对象数组。然后将graph 初始化为长度为numCourses 的数组。

虽然ArrayList[] 使用raw type ArrayList,但ArrayList&lt;type&gt; graph 使用泛型类型ArrayList&lt;T&gt; 并将type 作为类型参数传递。

这两者不可互换。不能使用数组代替其组件类型。 ArrayList[] 可能被用来规避阻止泛型类型数组实例化的限制。

【讨论】:

    【解决方案2】:

    使用方括号 ([]) 创建一个数组,而使用 "beaks" (&lt;&gt;) 传递参数类型。

    您的第二行创建了一个type 类型的ArrayList,而第一行创建了一个原始ArrayLists 数组(没有类型)——它们是完全不同的对象。

    如果你想要一个参数化的Lists 的集合,数组不是要走的路。更好地使用嵌套列表:List&lt;List&lt;type&gt;&gt;

    【讨论】:

      【解决方案3】:

      来自Oracle: Cannot Create Arrays of Parameterized Types

      您不能创建参数化类型的数组。例如,以下代码无法编译:

      List&lt;Integer&gt;[] arrayOfLists = new List&lt;Integer&gt;[2]; // compile-time error

      所以是的,你是对的,一般来说,声明列表或集合的正确方法如下:

      ArrayList<type> graph = new ArrayList<type>();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-12-16
        • 2011-02-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-20
        • 2011-09-20
        • 2020-06-07
        相关资源
        最近更新 更多