一个集合使用list.toArray(),那么修改集合的内容,数组的内容会被修改吗?
1 个回答
天一亮,时间就不属于我了。逆天而行不会。 因为 `List.toArray()`(无参版本)会**新建一个数组**,把集合中的元素拷贝过去,这个数组和原集合不是同一个底层存储。 ## 原理 以 `ArrayList` 为例: ```java public Object[] toArray() { return Arrays.copyOf(elementData, size); } ``` * 这里 `Arrays.copyOf()` 会创建一个新数组,并把集合中的元素复制到新数组中。 * 新数组和集合的底层数组是**不同的对象**,修改集合不会影响新数组,反之亦然。 ## 示例 ```java List<String> list = new ArrayList<>(); list.add("A"); list.add("B"); Object[] arr = list.toArray(); list.set(0, "X"); System.out.println(Arrays.toString(arr)); // [A, B] 不变 arr[1] = "Y"; System.out.println(list); // [X, B] 不变 ``` 结果: * 改 `list` → `arr` 不变 * 改 `arr` → `list` 不变 ## 特例 如果用的是 `toArray(T[] a)` 版本,并且**传入的数组容量足够且刚好被返回**,那么返回的就是你传入的数组对象(填充后返回),这时你修改这个数组,集合不会变,但数组内容会变,因为它就是你传入的数组。 ```java String[] given = new String[2]; list.toArray(given); given[0] = "Z"; System.out.println(list); // [A, B] 不变 ``` 这里也只是修改了你传入的数组,不会影响集合本身。 所以结论是: * `list.toArray()` → 数组是新建的,和集合无关,互不影响。 * `list.toArray(T[] a)` → 填充你传的数组,集合仍然不会随数组变化。发布于 2025-08-12 13:32 •IP属地 安徽举报评论收藏
公众号进入网站体验更佳

