按值排序的java并发映射

按值排序的java并发映射,java,hashmap,linkedhashmap,sortedmap,concurrentskiplistmap,Java,Hashmap,Linkedhashmap,Sortedmap,Concurrentskiplistmap,我正在寻找一种方法,以有一个并发映射或类似的键->值存储,可以按值排序,而不是按键排序 到目前为止,我一直在查看,但我找不到一种按值排序的方法(使用),因为compare方法只接收作为参数的键 该映射的键为字符串,值为整数。我正在寻找的是一种检索具有最小值(整数)的键的方法 我还考虑使用2个映射,创建一个包含整数键和字符串值的单独映射,这样我就可以得到一个按整数排序的映射,但是可以有多个具有相同值的整数,这可能会导致更多问题 范例 “用户1”=>3 “用户2”=>1 “user3”=>3 已排序

我正在寻找一种方法,以有一个并发映射或类似的键->值存储,可以按值排序,而不是按键排序

到目前为止,我一直在查看,但我找不到一种按值排序的方法(使用),因为
compare
方法只接收作为参数的键

该映射的键为字符串,值为整数。我正在寻找的是一种检索具有最小值(整数)的键的方法

我还考虑使用2个映射,创建一个包含整数键和字符串值的单独映射,这样我就可以得到一个按整数排序的映射,但是可以有多个具有相同值的整数,这可能会导致更多问题

范例

“用户1”=>3 “用户2”=>1 “user3”=>3

已排序列表: “用户2”=>1 “用户1”=>3 “user3”=>3

是否有办法做到这一点,或者是否有任何第三方库可以做到这一点


感谢

要按值排序,您可以有多个“值”到“键”的映射,您需要一个。这需要同步,因为没有并发版本


这并不意味着性能会很差,因为这取决于调用此数据结构的频率。e、 g.它最多可以加1微秒。

ConcurrentMap的原理是它可以并发访问-如果您想在任何时候对它进行排序,性能将受到显著影响,因为该映射需要完全同步(如哈希表),从而导致吞吐量降低


因此,我认为最好的办法是返回地图的排序视图,例如将所有元素放在一个不可修改的树状图中(尽管按值排序树状图需要一些调整)。

我最近不得不这样做,最后使用了一个
ConcurrentSkipListMap
,其中键包含一个字符串和一个整数。我最终使用了下面提出的答案。核心洞察是,您可以构造代码,以便在删除前一个密钥之前,允许使用不同值复制密钥

问题是保留一组动态字符串,这些字符串与可能从不同线程并发更改的整数相关联,如下所述。这听起来很像你想做的

以下是我的实现代码:


您好,谢谢,但我认为我不需要多重映射,因为键(字符串)->值(整数)是唯一的,并且我不能让同一个键有两个值,但我希望我的映射按值(整数)排序或者我在想,但这也不适用于反转贴图,使用整数作为键,使用字符串作为值,但是这可能会导致具有相同值(整数)的多个键。请看,我更新了exampeSo,如果有多个键指向相同的值,并且将其反转,则需要一个多重贴图,因为现在有一个键具有多个值。简而言之,您只能按键排序。是的。。。您是对的,但是我希望能够在某个时候删除基于键(字符串)的条目。通过反转贴图,我认为这将有点困难,因为我必须按值进行搜索。如果有反转贴图,则不需要搜索它。;)通过添加/删除键或更改值,我的地图中的值不断变化。您是否真的需要随时对其进行排序,还是只需要不时查询具有最小值的键?实际上,我只需要不时检索最小值,我不在乎它是否已排序。有没有一种方法可以在不解析整个映射的情况下做到这一点?没有,但这是我通常能想到的唯一解决方案——这不是Java提供什么或不提供什么的问题,而是一般来说什么是可行的问题。