的ArrayList<> /列表<> vs使用String数组并将其转换为ArrayList<>

时间:2015-03-01 12:00:15

标签: java android list arraylist

我目前正在Udacity上接受Google的Android开发课程。

我见过一个我不完全理解的代码示例(只是一个基本的Java问题):

String strarrWeek [] = {
            "Sunday",
            "Monday",
            "Tuesday",
            "Wednesday",
            "Thursday",
            "Friday",
            "Saturday"
        };

List<String> lstWeek = new ArrayList<String>(Arrays.asList(strarrWeek));

这是转换的原因,如果可以的话:

ArrayList<String> arlstWeek = new ArrayList<String>();
        arlstWeek.add("Sunday");
        arlstWeek.add("Monday");
        arlstWeek.add("Tuesday");
        arlstWeek.add("Wednesday");
        arlstWeek.add("Thursday");
        arlstWeek.add("Friday");
        arlstWeek.add("Saturday");

我错过了什么吗?

感谢。

+编辑: 有没有办法只使用List&lt;&gt; / ArrayList&lt;&gt;构造函数(我的意思是没有“.add()”调用),而没有创建“String []”数组?

5 个答案:

答案 0 :(得分:3)

主要区别在于第一个代码段可以直接放入代码的声明部分(即构造函数和方法之外),而第二个代码片段必须位于代码块中。这是因为第一个片段仅使用初始化构造,而第二个片段混合初始化(构造函数)和执行(add的调用)。

第一个构造使用一个数组和一个列表包装器,它们都被删除,因此它不像第二个那样具有内存效率。第二个版本可以通过在向其添加字符串之前请求使用确切的项目数来初始化ArrayList来改进:

ArrayList<String> arlstWeek = new ArrayList<String>(7);
//                                                  ^

当您向其添加元素时,这会阻止重新分配。

答案 1 :(得分:1)

所有答案都有点误导,而且技术上没有100%正确:

String strarrWeek [] = {
        "Sunday",
        "Monday",
        "Tuesday",
        "Wednesday",
        "Thursday",
        "Friday",
        "Saturday"
};

此代码:

  • 在声明
  • 中使用数组初始化的快捷语法
  • 创建一个包含7个项目的数组
  • Java中的数组总是可变数据结构

List<String> lstWeek = new ArrayList<String>(Arrays.asList(strarrWeek)); 这段代码:

  • 将首先创建一个固定大小的List实例,该实例将同步列表中的更改
  • 然后通过迭代第一个List并将所有元素添加到新创建的实例中来创建其他List实例

ArrayList<String> arlstWeek = new ArrayList<String>();
    arlstWeek.add("Sunday");
    arlstWeek.add("Monday");
    arlstWeek.add("Tuesday");
    arlstWeek.add("Wednesday");
    arlstWeek.add("Thursday");
    arlstWeek.add("Friday");
    arlstWeek.add("Saturday");

此代码:

  • 将使用默认大小创建ArrayList的空可变实例,并将所有值放在集合中

答案 2 :(得分:1)

在示例的第2部分中,您可以使用更短的语法:

ArrayList<String> arlstWeek = new ArrayList<String>(){
            {
                add("Sunday");
                add("Monday");
                add("Tuesday");
                add("Wednesday");
                add("Thursday");
                add("Friday");
                add("Saturday");
            }
 };

答案 3 :(得分:0)

在第一个例子中,你只有两个函数调用,第二个你有n个函数调用。我更喜欢第一种方法 - 应用程序必须做的越少,失败的次数越少。

答案 4 :(得分:0)

它保持元素的顺序,它可能与效率有关,因为.add()方法将使每个调用的内存在内存中增长。

当然,这只是猜测,这是我能想到的唯一优点。