ArrayList<ArrayList<Integer>> result = new ArrayList<>();
ArrayList<Integer> temp = new ArrayList<>();
temp.add(1);
temp.add(2);
result.add(temp);
temp.remove(temp.size() - 1);
temp.add(1, 3);
result.add(new ArrayList<>(temp));
结果是[[1,3],[1,3]],但我认为它应该是[[1,2],[1,3]],为什么?
答案 0 :(得分:5)
关注评论
temp.add(1); /aaded 1
temp.add(2); / added 2
result.add(temp);
temp.remove(temp.size() - 1); // removed index 1 that i.e removed 2
temp.add(1, 3); // added 3 at the index 1 again. now it is 1,3
result.add(new ArrayList<>(temp)); // And you are added a new array list again with temp
如果我理解正确,你会误解
的逻辑 temp.add(1, 3);
这意味着您要告诉我在3
列表中的索引1
添加值temp
。
答案 1 :(得分:2)
输出是自我解释的。
误解
1。)temp.remove(temp.size() - 1);
这会删除temp list
中的最后一个元素,因为temp list
中的result
被引用,所以它也会被引用。
2。)temp.add(1, 3);
它会在temp list
的索引1处添加值3。
public static void main(String[] args) {
ArrayList<ArrayList<Integer>> result = new ArrayList<>();
ArrayList<Integer> temp = new ArrayList<>();
temp.add(1);
temp.add(2);
System.out.println("Temp is : " + temp);
result.add(temp);
System.out.println("Result is : " + result);
temp.remove(temp.size() - 1);
System.out.println("Temp is : " + result);
System.out.println("Result is : " + result);
temp.add(1, 3);
System.out.println("Temp is : " + temp);
result.add(new ArrayList<>(temp));
System.out.println("Result is : " + result);
}
<强>输出强>
Temp is : [1, 2]
Result is : [[1, 2]]
Temp is : [[1]]
Result is : [[1]]
Temp is : [1, 3]
Result is : [[1, 3], [1, 3]]
答案 2 :(得分:0)
如果您直接更新temp
,那么指向该list
的所有引用也会更新(在您的情况下为result
列表第一个索引),这就是您获得[[1, 3], [1, 3]]
的原因输出。
您可以使用以下代码。
ArrayList<ArrayList<Integer>> result = new ArrayList<>();
ArrayList<Integer> temp = new ArrayList<>();
temp.add(1); //added 1
temp.add(2); // added 2
result.add(temp);
// creating new object and populating it with the values of temp.
ArrayList<Integer> temp1 = new ArrayList<>(temp);
// or you can reinitialize temp with its previous values and then use it as you have done in your code.
// temp = new ArrayList<>(temp);
temp1.remove(temp1.size() - 1);
temp1.add(1, 3);
result.add(temp1);
System.out.println(result);
<强>输出:强>
[[1, 2], [1, 3]]
答案 3 :(得分:0)
问题是你没有将temp的值复制到结果中,但你只是提供了对temp的引用。
通过更改参考,您可以更改结果。
要解决此问题,请尝试以下操作:
SoapFault - faultcode: 'SOAP-ENV:Server' faultstring: 'Procedure 'catalogProductList' not present' faultactor: 'null' detail: null