java—通过arraylist更改数组的大小

k75qkfdt  于 2021-07-12  发布在  Java
关注(0)|答案(3)|浏览(557)

数组的一个主要特征是不变性(数组的大小不能改变),但是当我练习的时候,我发现自己是这样的:
我们有一个特定大小的数组

String[] strArr = new String[1];

和带有对象的arraylist

ArrayList<String> list = new ArrayList<>();
list.add("Alex");
list.add("Ali");
list.add("Alll");

所以当我们尝试将列表转换为数组并将其赋给strarr时,就像这样

strArr =  list.toArray(strArr);
        for(String str : strArr ) {
            System.out.println(str);
        }

即使数组的大小不等于列表的大小,它也可以正常工作
所以我只想知道这是怎么可能的,当数组的大小不能改变的时候?

ilmyapht

ilmyapht1#

已分配新阵列 strArray 第一次引用大小为1的字符串数组时 strArr = list.toArray(strArr); ,则更改的引用 strArray 到另一个数组。所以你不需要改变数组大小,你只需要改变数组的大小 strArrays 指。

也许你认为 list.toArral(strArr) 修改 strArr 但事实并非如此,正如您在java文档中看到的那样。上面写着:
如果列表适合指定的数组,则返回其中。否则,将使用指定数组的运行时类型和此列表的大小分配一个新数组“
对于您的案例来说,文档中的重要部分是:“否则,将分配一个新数组”,因此不会调整数组大小。

t1rydlwq

t1rydlwq2#

你可以用

strArr = list.subList(0, strArr.length).toArray(strArr);

巴斯卡利 List#subList(fromIndex, toIndex) 创建一个新列表,其中的元素从 fromIndex 高达 toIndex (自我解释)
你可以阅读更多关于https://docs.oracle.com/javase/8/docs/api/java/util/list.html#sublist-内景内景-

c9x0cxw0

c9x0cxw03#

它会更改对新对象的引用。您可以通过以下方式进行检查: System.out.println(strAttr) 在您首先分配变量之后,然后在调用 strArr = list.toArray(strArr);

相关问题