我有2个LinkedHashMaps,
LinkedHashMap<ArrayList<Point>, Color> map;
LinkedHashMap<ArrayList<Point>, Color> totalMap;
两者都相同,但是通过使用撤消按钮,地图已从中删除了条目。为了重做以前撤消的ArrayList,我一直在尝试遍历totalMap,并将每个条目添加到map.size,因为这将用重复项替换map中的点,并且还添加一个,我将如何进行这样做?
编辑: 我已经多次重写了这个,但这是我发布的最新版本
public LinkedHashMap<ArrayList<Point>, Color> putNext(LinkedHashMap<ArrayList<Point>, Color> map1,
LinkedHashMap<ArrayList<Point>, Color> map2) {
for (Map.Entry<ArrayList<Point>, Color> entry : map2.entrySet()) {
if (map1.size() < map2.size()) {
map1.put(entry.getKey(), entry.getValue());
}
}
return map1;
}
EDIT2:
我正在编写一个绘制程序,用于旋转/反映所有点以生成模式Seen here
要绘制点,我一直在创建一个ArrayList,然后在paintComponent()方法中绘制到屏幕。为了处理小的更改,例如扇区数和undo / redo,我一直在将ArrayList添加到LinkedHashMap,然后将其取消。在处理Undo时,我已经制作了两个相同的Maps,map和totalMap,但是当调用undo()时,它会从map中删除最新的条目,而totalMap保持不变。
我一直试图做的是,当按下重做时,它将从totalMap获取条目,在索引map.size中,并将其放在地图中。
由于
答案 0 :(得分:1)
要实现撤消/重做逻辑,您需要两个堆栈,以及一个表示要撤消/重做的操作的类。
在您的情况下,似乎某个操作由SignInManager<T>
和$conn
组成,因此请创建一个以字段为单位的类。
在更高级的系统中,可以有不同类型的操作,ArrayList<Point>
更可能是Color
,而不是Action
。
然后你将有两堆动作对象。在Java中,如果需要堆栈功能,请使用Deque
。
然后你会有这样的逻辑:
interface