请在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]
}
}
该方法应该是什么?
注意:测试已经完成,所以你可以回答这个问题谢谢!
答案 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.
}