【发布时间】:2018-03-10 18:39:05
【问题描述】:
我有 2 个 LinkedHashMap,
LinkedHashMap<ArrayList<Point>, Color> map;
LinkedHashMap<ArrayList<Point>, Color> totalMap;
两者是相同的,但地图已通过使用撤消按钮从其中删除了条目。为了重做先前撤消的ArrayList,我一直在尝试遍历totalMap,并将每个条目添加到map.size,因为这将用重复的点替换地图中的点,并且还要添加一个,我该怎么做这样做?
编辑: 我已经重写了好几次,但这是我推出的最新版本
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() 方法中绘制到屏幕上。为了处理小的更改,例如扇区数和撤消/重做,我一直在将 ArrayList 添加到 LinkedHashMap,然后再将其取消。在处理 Undo 时,我制作了两个相同的 Map,map 和 totalMap,但是当调用 undo() 时,它会从 map 中删除最新的条目,而 totalMap 保持不变。
我一直在尝试做的是,当按下重做时,它将从totalMap中获取索引map.size的条目,并将其放入map中。
谢谢
【问题讨论】:
-
我一直在尝试:那么,您尝试的代码在哪里?为什么不直接使用 putAll()? docs.oracle.com/javase/8/docs/api/java/util/…?
-
我认为需要更多解释。你不应该使用 ArrayLists 作为映射键。
-
当我第一次想到如何做到这一点时,我认为这样做是不切实际的,但我想不出另一个
-
@JBNizet 对于每次按下重做它应该只添加来自totalMap的下一个条目,而不是全部
-
您是否误用
LinkedHashMap作为配对值的List?一个动作将ArrayList<Point>, Color对附加到末尾,撤消删除最后一个条目,并重做从另一个映射重新添加它?如果是这样,为这对值创建一个类,并将Map替换为该类的List。