¿Hay alguna manera de crear una implementación segura para subprocesos de Map
que mantenga sus entradas ordenadas por valor? Sé que puedo crear un hilo de seguridad Map
como estoordena las entradas del mapa concurrente por valor
ConcurrentMap<String, Double> rankings = new ConcurrentHashMap<String, Double>();
Y a continuación, puede obtener las entradas ordenadas por valor pasándolo a un método de utilidad como esto:
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;
}
Pero lo que yo' m buscando es un hilo seguro Map
que mantiene las entradas ordenados por valor, por lo que no tengo que llamar a un método como el anterior después de cada inserción/eliminación con el fin de mantener las entradas ordenados por valor. Supongo que estoy buscando una implementación que combine el comportamiento de ConcurrentHashMap
y LinkedHashMap
, pero aún no he encontrado ninguna.
ConcurrentSkipListMap casi proporciona lo que quiero, pero solo parece ser compatible con la clasificación por valor clave.
En su caso de uso, ¿puede restringir el problema a valores * únicos *, o algunas veces obtiene valores duplicados? Si tiene valores duplicados, ¿tiene más restricciones de clasificación? –
Además, aclare, ¿quería * ordenó * o * ordenó *? Un LinkedHashMap te da ordenado, pero no ordenado. –
um ..... ¿cuál es la diferencia entre ordenado y ordenado? –