값으로 정렬 된 항목을 유지 관리하는 Map
의 스레드 안전 구현을 만드는 방법이 있습니까? 나는이값순 정렬 맵핑 항목
ConcurrentMap<String, Double> rankings = new ConcurrentHashMap<String, Double>();
같은 스레드 안전 Map
를 만들 수 있습니다 그리고 다음과 같은 유틸리티 메소드에 전달하여 값으로 분류 항목을 얻을 수 있습니다 알고
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은 내가 원하는 것을 거의 제공하지만 키 값순으로만 정렬 할 수 있습니다.
사용 사례에서 문제를 * 고유 * 값으로 제한 할 수 있습니까? 아니면 때때로 중복 값을 가져올 수 있습니까? 값이 중복되면 더 많은 정렬 제약 조건이 있습니까? –
또한, * sorted * 또는 * ordered *를 원하십니까? LinkedHashMap은 정렬하지만 정렬하지는 않습니다. –
음 ..... 정렬 및 주문의 차이점은 무엇입니까? –