关于结果的java ArrayList

时间:2015-09-04 04:39:37

标签: java arraylist

    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]],为什么?

4 个答案:

答案 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