有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

        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);
        }

该结果如何输出为JavaChamp.com,即使它在第1行中转换为列表并在第2行中修改


共 (3) 个答案

  1. # 1 楼答案

    Arrays.asList()的JavaDoc:

    Returns a fixed-size list backed by the specified array.

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

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

    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"};
    
  2. # 2 楼答案

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

  3. # 3 楼答案

    ^{}不会将数组复制到列表中-它会在数组上创建一个视图。通过列表所做的任何更改都会影响阵列,反之亦然。这就是为什么不能添加到Arrays.asList返回的列表中(或从中删除),因为数组本身不能更改大小

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

    Returns a fixed-size list backed by the specified array. (Changes to the returned list "write through" to the array.)

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