【发布时间】:2019-06-21 05:21:26
【问题描述】:
使用LinkedHashMap,当我尝试重新插入具有不同值的相同键时,它会替换值并保持键的顺序,即如果我这样做
Map<String,String> map = new LinkedHashMap<>();
map.put("a", "a");
map.put("b", "b");
map.put("c", "c");
map.put("d", "d");
map.values().stream().forEach(System.out::print);
输出:abcd
现在,如果我在地图中添加具有相同键的不同值,则顺序保持不变,即
map.put("b", "j");
map.values().stream().forEach(System.out::print);
输出:ajcd
还有其他方法吗?一种是删除并重新插入具有新值的键,将acdj 打印为输出。就我而言,我想根据用作值的对象的某些属性对多个键执行此操作?
使用流的解决方案会更好。
【问题讨论】:
-
取出钥匙再重新插入有什么问题?我认为这两个操作都应该是
O(1)。 -
删除和插入是唯一的方法,实际上也不是一个坏方法。
-
@TimBiegeleisen 根据答案和 cmets 没有其他办法,我需要删除密钥并重新插入它。但是我需要新的地图来存储删除的条目然后把它回到地图中作为删除和放置在迭代时不能做同样的事情。?或者我可以在没有额外空间的情况下这样做吗?
-
您可以使用this constructor 创建一个地图,在每次访问时都会更改顺序,当然,您必须接受即使
get也可能更改顺序的事实。跨度>
标签: java java-8 java-stream linkedhashmap