将一个LinkedHashMap中的特定条目添加到另一个

时间:2018-03-10 18:39:05

标签: java hashmap

我有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中,并将其放在地图中。

由于

1 个答案:

答案 0 :(得分:1)

要实现撤消/重做逻辑,您需要两个堆栈,以及一个表示要撤消/重做的操作的类。

在您的情况下,似乎某个操作由SignInManager<T>$conn组成,因此请创建一个以字段为单位的类。

在更高级的系统中,可以有不同类型的操作,ArrayList<Point>更可能是Color,而不是Action

然后你将有两堆动作对象。在Java中,如果需要堆栈功能,请使用Deque

然后你会有这样的逻辑:

interface