Java在转换为列表后插入数组

Java在转换为列表后插入数组,java,java-collections-api,Java,Java Collections Api,结果如何输出为JavaChamp.com,即使它在第1行转换为列表并在第2行修改,也不会将数组复制到列表中—它会在数组上创建一个视图。通过列表所做的任何更改都会影响阵列,反之亦然。这就是为什么不能向Arrays.asList返回的列表中添加或从中删除,因为数组本身无法更改大小 文件从一个方向明确了这一点: 返回指定数组支持的固定大小列表。对返回列表的更改将写入数组 。。。但它是双向的,因为列表没有专用的后备存储。它实际上是由数组支持的。来自JavaDoc,用于: 返回指定数组支持的固定大小列表

结果如何输出为JavaChamp.com,即使它在第1行转换为列表并在第2行修改,也不会将数组复制到列表中—它会在数组上创建一个视图。通过列表所做的任何更改都会影响阵列,反之亦然。这就是为什么不能向Arrays.asList返回的列表中添加或从中删除,因为数组本身无法更改大小

文件从一个方向明确了这一点:

返回指定数组支持的固定大小列表。对返回列表的更改将写入数组

。。。但它是双向的,因为列表没有专用的后备存储。它实际上是由数组支持的。

来自JavaDoc,用于:

返回指定数组支持的固定大小列表

这意味着您的列表仍由阵列支持。因此,如果更改数组,则更改列表中的内容

编辑,为获得更多乐趣,您可以反向操作:

        String[] arr = { "Java", "Champ", "." };
        List<String> list = (List<String>) Arrays.asList(arr);  // line 1
        arr[2] = ".com"; // line 2
        for (String word : list) {
            System.out.print(word);
        }

Arrays.asList返回传入数组的列表视图。它不会复制数组。例如,list.get1只是委托给arr[1]。因此,当您继续更改数组元素时,您将继续隐式更改列表元素。

。我不知道,不需要你的演员名单。
String[] arr = { "Java", "Champ", "." };
List<String> list = (List<String>) Arrays.asList(arr);  // line 1
arr[2] = ".com"; // line 2
list.set(0, "Foo"); // Array is now {"Foo", "Champ", ".com"};