Java不可修改的arraylist编程测试

时间:2017-04-23 12:12:56

标签: java arrays arraylist

请在downvoting之前阅读评论。

以下是给定的代码;目前输出[3,2][3,2,4]。您必须修改restore()方法,以便输出为[1,2][1,2]

import java.util.ArrayList;

public class Solution {
    private ArrayList<Integer> data;

    public Solution(ArrayList<Integer> data) {
        this.data = data;
    }

    public ArrayList<Integer> restore() {
        return this.data;
    }

    public static void main(String[] args) {
        ArrayList<Integer> list = new ArrayList<Integer>();
        list.add(1);
        list.add(2);
        Solution snap = new Solution(list);
        list.set(0, 3);
        list = snap.restore();
        System.out.println(list); // Should output [1, 2]
        list.add(4);
        list = snap.restore();
        System.out.println(list); // Should output [1, 2]
    }
}

该方法应该是什么?

注意:测试已经完成,所以你可以回答这个问题谢谢!

2 个答案:

答案 0 :(得分:1)

你的问题有点混乱。 但我认为恢复应该恢复初始输入。

因此:

ArrayList<Integer> init;
public Solution(ArrayList<Integer> data) {
    this.data = data;
    this.init = new ArrayList<Integer>(data);
}    

public ArrayList<Integer> restore() {
    ArrayList<Integer> cpy = new ArrayList<Integer>(this.init);
    return cpy;
}

答案 1 :(得分:1)

您需要在代码中进行一些更改。问题是,Java操纵了Objects reference并执行了manipulation operations部分因reference而更改原始数据的内容。

将您的代码更改为:

public Main(ArrayList<Integer> data) 
{
    ArrayList<Integer> newList = new ArrayList<Integer>();      

    for(Integer in:data)
        newList.add(in);

    this.data = newList;
}

public ArrayList<Integer> restore() 
{
    ArrayList<Integer> newList = new ArrayList<Integer>();

    for(Integer in:data)
        newList.add(in);

    return newList; //returns a reference of a list which has nothing to do with the original list.
}