情况:
我有Map
,TreeMap
更准确,看起来像
TreeMap<String, Integer>
我必须能够以递增或递减的方式对键或值进行排序。结果必须是Map
之类的
Map<String, Integer>
不是ArrayList
或类似的东西,因为我的代码的其余部分(读取:分配)将不再起作用。我搜索过但找不到符合我需求的东西。这甚至可能吗?双值不会丢失。
答案 0 :(得分:3)
如果您使用两个BiMaps,每个BiMaps互相支持,那么您实际上有一个地图。 像这样的东西:
import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap;
private BiMap<Integer, String> localid = HashBiMap.create();
private BiMap<String, Integer> inverse = localid.inverse();
你可以对待每个参考文献,localid&amp;逆,作为他们自己的地图,但改变为一个反映在另一个。唯一的小缺点是,现在键和值必须是唯一的,因为一个的值是另一个的键。对于大多数情况,这不是问题。
为了对其进行排序,您可以随时制作一个树形图的本地副本,并强制进行排序。例如。
ImmutableMap.copyOf(Maps.newTreeMap(bimap))
现在,如果您从未对地图进行更改,则会提供已排序的视图,您可以通过其中任何一个进行更改。
编辑:TreebasedTable为每个值都有两个键,您可以使用比较器对键集进行排序。我不确定这是否正是您所需要的,因为这些键集是独立的,但您可以稍微重构一下代码以使其成为可行的解决方案。
答案 1 :(得分:1)
如果地图很小并且迭代它是一个不常见的操作,一个解决方案就是使用HashMap
(用于查找速度),然后在每次迭代时对条目进行排序。
另一种解决方案,如果你经常与直接地图查找进行这些迭代,并且如果值(而不仅仅是键)是唯一的,那么将维护两个有序地图,一个<String, Integer>
和一个{{ 1}}。
答案 2 :(得分:0)
答案 3 :(得分:0)
TreeMap的键按其可比性排序。
答案 4 :(得分:0)
尝试SortedMap
进一步提供其键的总排序的Map。地图是根据其键的自然顺序排序的,或者是通常在排序地图创建时提供的比较器。迭代有序映射的集合视图(由entrySet,keySet和values方法返回)时会反映此顺序。提供了几个额外的操作以利用订购。 (此接口是SortedSet的地图模拟。)