相关疑难解决方法(0)

754
推荐指数
22
解决办法
55万
查看次数

Arrays.asList(array)和new ArrayList <Integer>(Arrays.asList(array))之间的区别

有什么区别

1.List<Integer> list1 = new ArrayList<Integer>(Arrays.asList(ia));  //copy
2.List<Integer> list2 = Arrays.asList(ia);
Run Code Online (Sandbox Code Playgroud)

哪里ia是整数数组.

我开始知道不允许进行某些操作list2.为什么会这样?它是如何存储在内存中的(引用/复制)?

当我洗牌时,list1不会影响原始数组,但list2确实如此.但仍list2有些令人困惑.

如何ArrayList列出列表与创建新列表不同ArrayList

list1 differs from (1)
ArrayList<Integer> list1 = new ArrayList<Integer>(Arrays.asList(ia));
Run Code Online (Sandbox Code Playgroud)

java collections list

101
推荐指数
4
解决办法
18万
查看次数

Arrays.copyOf会产生浅拷贝还是深拷贝?

关于是否Arrays.copyOf会产生深层或浅层副本,似乎存在很多混淆和不同意见([1]和其他来源).

此测试表明副本很深:

String[] sourceArray = new String[] { "Foo" };
String[] targetArray = java.util.Arrays.copyOf( sourceArray, 1 );

sourceArray[0] = "Bar";

assertThat( targetArray[0] ).isEqualTo( "Foo" ); // passes
Run Code Online (Sandbox Code Playgroud)

该测试表明副本很浅:

String[][] sourceArray = new String[][] { new String[] { "Foo" } };
String[][] targetArray = java.util.Arrays.copyOf( sourceArray, 1 );

sourceArray[0][0] = "Bar";

assertThat( targetArray[0][0] ).isEqualTo( "Foo" ); // fails
Run Code Online (Sandbox Code Playgroud)

解决方案只是简单地制作了顶级维度的深层副本,但其他维度是浅层副本吗?真相是什么?

[1] 如何在Java中对二维数组进行深层复制?

java

16
推荐指数
3
解决办法
1万
查看次数