有没有办法创建一个线程安全的
但是我需要的是一个线程安全的
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;
}
但是我需要的是一个线程安全的
Map
,它能够通过值来维护条目的排序,这样我就不必在每次插入/删除后调用上述方法以保持条目按值排序。我猜我正在寻找一种将ConcurrentHashMap
和LinkedHashMap
的行为结合起来的实现,但还没有找到。 ConcurrentSkipListMap几乎提供了我想要的功能,但似乎只支持按键值排序。