有没有什么办法可以创建Map
的线程安全实现来保持它的条目按值排序?我知道我可以创建一个线程安全的Map
这样按值排序并发映射条目
ConcurrentMap<String, Double> rankings = new ConcurrentHashMap<String, Double>();
,然后我可以将它传递给一个实用的方法是这样得到的数值排序的条目:
public static <K, V extends Comparable<? super V>> Map<K, V> sortByValue(Map<K, V> map) {
List<Map.Entry<K, V>> list = new LinkedList<Map.Entry<K, V>>(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<K, V>>() {
@Override
public int compare(Map.Entry<K, V> o1, Map.Entry<K, V> o2) {
return (o1.getValue()).compareTo(o2.getValue());
}
});
Map<K, V> result = new LinkedHashMap<K, V>();
for (Map.Entry<K, V> entry : list) {
result.put(entry.getKey(), entry.getValue());
}
return result;
}
但我” m寻找的是一个线程安全的Map
保持条目按值排序,这样我就不必在每次插入/删除后调用上述方法,以保持条目按值排序。我想我正在寻找一种结合ConcurrentHashMap
和LinkedHashMap
的行为的实现,但还没有找到。
ConcurrentSkipListMap几乎提供了我想要的,但它似乎只支持按键值排序。
在你的用例中,你可以将问题限制为* unique *值还是有时会得到重复值?如果你确实有重复的值,你有进一步的排序约束? – 2011-05-09 21:07:49
另外,请澄清 - 你想*排序*或*订购*?一个LinkedHashMap给你排序,但没有排序。 – 2011-05-09 21:08:29
恩......有序和有序有什么区别? – 2011-05-09 21:37:24