ArrayList<>/List<> 与使用 String 数组并将其转换为 ArrayList<>

ArrayList<>/List<> vs using String array and conerting it to 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<> / ArrayList<> 构造函数(我的意思是没有“.add()”调用),而不创建 "String []" 数组?

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

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

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

当您向集合中添加元素时,这会阻止集合增长时的重新分配。

在第一个示例中,您只有两个函数调用,在第二个示例中,您有 n 个函数调用。我更喜欢第一种方法——应用程序需要做的事情越少,失败的频率就越低。

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

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

所有答案都有点误导,技术上并非 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 的空可变实例,并将所有值放入集合

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

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