java 是否有一个类似LinkedHashMap的类,其中PUT最后的条目也是顺序最后的?

jjjwad0x  于 2023-06-20  发布在  Java
关注(0)|答案(1)|浏览(119)

在LinkedHashMap中,条目默认按插入顺序排序。构造参数“accessOrder”允许改变排序,使得最后一个条目是最后被ACCESSED的条目。
然而,我确实需要一个Map,其中只有当通过PUT(put,putAll,...)添加或覆盖条目时,排序才会改变。此外,给定的map应该直接提供一个反向迭代器,即而不必创建要迭代的map的keySet的反向数组。
有谁知道一个现有的Java类可以提供我正在搜索的内容吗?
PS:如果Map允许并发修改就太好了,但这并不是必须的,因为我也可以手动同步访问。

pxq42qpu

pxq42qpu1#

Java 21正在为LinkedHashMap添加功能,允许您将元素添加到Map的末尾,并返回Map的反向视图。这两个方法都是由LinkedHashMap现在实现的新SequencedMap接口定义的。

SequencedMap<String, Integer> map = new LinkedHashMap<>();
map.putLast("A", 1);
map.putLast("B", 2);
map.putLast("A", 3);
map.putLast("C", 4);

System.out.println(map); // {B=2, A=3, C=4}
System.out.println(map.reversed()); // {C=4, A=3, B=2}

putLast方法将元素添加到map的末尾,或者如果它已经存在,则将其移动到末尾:
如果给定的Map尚未存在,则将其插入到Map中,或者如果Map已经存在,则替换Map的值(可选操作)。在此操作正常完成后,给定的Map将出现在此Map中,并且它将是此Map遇到顺序中的最后一个Map。
如果此Map已经包含此键的Map,则在必要时重新定位该Map,以使其在遇到顺序中位于最后。
请注意,这需要使用putLast方法,而不是putputAll方法,因此它并不完全满足您所陈述的要求。但根据您使用Map的方式,这可能就足够了。
reversed方法返回LinkedHashMap的反转视图:
返回此Map的逆序视图。返回视图中Map的相遇顺序与此Map中Map的相遇顺序相反。逆序会影响所有顺序敏感的操作,包括对返回视图的视图集合的操作。如果实现允许对此视图进行修改,则修改将“直写”到底层Map。对底层Map的更改在此反转视图中可能可见,也可能不可见,具体取决于实现。
允许对反转视图及其Map视图进行修改,并将修改传播到此Map。此外,对该Map的修改将在反转视图及其Map视图中可见。

相关问题