我的格式为
ArrayList<Integer> list = new ArrayList();
我在循环中添加和删除各种元素。但是,我需要一些结构,我可以存储临时列表,以便以后可以访问它们。
例如,如果我执行System.out.print(list),它将返回
[1,2,3,4]
然后我需要调用像store.add(list)这样的东西 然后,如果我在列表中添加另一个元素 - list.add(5),它就变成了
[1,2,3,4,5]
then again
store.add(list)
并通过调用System.out.print(store)返回
[1,2,3,4]
[1,2,3,4,5]
换句话说,商店应该是列表中的列表吗?
答案 0 :(得分:1)
列表创建如下:List<List<Integer>> listInList = new ArrayList<List<Integer>>();
答案 1 :(得分:0)
我想你想拥有相同列表的多个版本。
你只需拥有一份清单即可获得。
该列表将仅存储对其中存储的成员列表的引用。因此,当您编辑列表时,也会编辑所有旧版本。它是幕后的同一个列表。
使用List<List<Integer>>
的正确方法如下:
List<List<Integer>> store = new ArrayList<>(); // Create storage for versions
List<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3, 4));
store.add(new ArrayList<>(list)); // Add list's copy to store.
list.add(5); // Edit it as you want.
store.add(new ArrayList<>(list)); // Add list's copy to store.
System.out.println(store); // Print all versions
<强>输出:强>
[[1,2,3,4],[1,2,3,4,5]]
希望这有帮助。
答案 2 :(得分:0)
存储每个新列表有点浪费,特别是当对前一个列表的更改非常简单时(例如,在结尾处添加和删除)。您可以提出一种跟踪变化的策略,而不是反复存储相同的信息。
首先,您应该决定以下哪项更重要:
解决方案已经发布了地址1.,所以这里是2的提案。(为了简洁起见,我将限制可能的操作添加到后面):
public enum Operation { ADD, REMOVE }
public class Modification {
Operation operation;
Integer element;
public Modification(Operation operation, Integer element) {
this.operation = operation; // could add some sanity checks (e.g. cannot remove from empty list)
this.element = element;
}
}
List<Integer> initialList = Arrays.asList(1, 2, 3, 4);
List<Modification> history = new ArrayList<>();
history.add(new Modification(Operation.ADD, 5));
然后,您可以定义一个函数来计算所需的列表列表:
List<List<Integer>> getAllLists (List<Integer> initialList, List<Modification> history) {
List<List<Integer>> allLists = new ArrayList<>();
allLists.add(initialList);
prevList = initialList;
for (Modification modification : history) {
prevList = new ArrayList<>(prevList);
if (modification.operation == ADD) prevList.add(modification.element);
else prevList.remove(prevList.size()-1);
allLists.add(prevList);
}
return allLists;
}