【问题标题】:Arraylist and List in JavaJava中的Arraylist和List
【发布时间】:2015-02-06 05:57:42
【问题描述】:

谁能解释一下以下代码的含义,尤其是ArrayList和List,为什么我们需要同时使用它们?

String [] forecastArray =
            {
                    "Today - Sunny - 35/30",
                    "Tomorrow - Foggy - 33/28",
                    "Wednesday - Cloudy - 33/26",
                    "Thursday - Sleepy - 30/24",
                    "Friday - Bunking - 36/34",
                    "Saturday - Trapped - 38/35",
                    "Sunday - Heavy Rain - 32/28"
            };
    List<String> myList = Arrays.asList(forecastArray);

    List<String> weekForecast = new ArrayList<>(myList);

【问题讨论】:

  • Java 中的 Google 多态性
  • 到目前为止的答案中缺少一点:myList 是由forecastArray 支持的List,并且是不可变的。你将无法改变它。 weekForecast 由该数组的副本支持并且可以更改。

标签: java list arraylist


【解决方案1】:

List 是一个接口。 ArrayList 是该接口的实现。一般建议对接口进行编程。这样您就可以切换到 LinkedList 并且以后不会更改返回类型或其他代码。这是polymorphism 的示例。

【讨论】:

  • Arrays.asList`` is neither an ArrayList`返回的列表也不是LinkedList - 实际上,它是您无权访问的类型,因此您不能使用实际类型。
  • 这个信息很棒。我的问题是为什么我们需要将它作为 Arrays.asList(forecastArray) 而不是简单的 forecastArray 传递。
  • ArrayList 没有接受数组的构造函数。
【解决方案2】:

列表是一个接口。 ArrayList 是该接口的实现。

基本上这里 Arrays.asList(forecastArray) 方法返回一个 List 但调用者不知道返回的是哪个实例。所以首先分配给列表,然后尝试初始化 Arraylist。

或者你可以像下面那样做。

List weekForecast = new ArrayList(Arrays.asList(forecastArray));

【讨论】:

    【解决方案3】:

    Elliot Frish 已经清楚地解释了第一部分。

    在您的特定情况下,

    List<String> myList = Arrays.asList(forecastArray);
    
    List<String> weekForecast = new ArrayList<>(myList);
    

    不一样。

    因为Arrays.asList返回的List实例与java.utils.ArrayList不同。 ArrayList 返回的是 private static classArrays 类中。

    由于ArrayLists(在数组和集合中)实现List接口,您可以将它们分配给List界面代码 :)

    注意:ArrayList&lt;String&gt; myList = Arrays.asList(someArray); --> 无法编译

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-25
      • 2011-08-18
      • 2015-07-30
      • 1970-01-01
      • 2016-03-02
      • 2015-08-11
      • 2012-11-30
      相关资源
      最近更新 更多