我正在尝试找到一个类似于LinkedHashMap的结构,它按其值对其进行排序。 我需要能够更新值。 我会经常检查订单,所以我需要一个避免每次都对Map进行排序的解决方案。
类似的东西:
DynamicSortedMap<String,Integer> map = new DynamicSortedMap<String,Integer>();
map.put("key1",4);
map.put("key2",3);
map.put("key3",6);
System.out.println("Map: "+map);
map.update("key1",1);
System.out.println("Update:"+map);
输出:
Map: {key3=6, key1=4, key2=3}
Update: {key3=6, key2=3, key1=1}
是否有任何结构允许这个? 如果没有,有任何关于如何做的想法吗?
感谢您的帮助,
答案 0 :(得分:1)
我认为你正在寻找像TreeMap这样的东西,按键排序:
SortedMap<String, Integer> map = new TreeMap<String, Integer>();
答案 1 :(得分:0)
尽管LinkedHashMap实际上可能是一个很好的基础,但遗憾的是它在操纵迭代顺序方面非常有限。我认为apache common-collections会更好。
答案 2 :(得分:0)
class SortValueMap extends HashMap<String,Integer>{
@Override
public Set<Entry<String,Integer>> entrySet() {
List<Entry<String,Integer>> entries = new ArrayList<Entry<String,Integer>>(super.entrySet());
Collections.sort(entries, new Comparator<Entry<String,Integer>>(){
@Override
public int compare(Map.Entry<String,Integer> o1, Map.Entry<String,Integer> o2) {
return o1.getValue().compareTo(o2.getValue());
}});
return new LinkedHashSet<Entry<String,Integer>>(entries);
}
}
...
SortValueMap map = new SortValueMap();
map.put("key1",4);
map.put("key2",3);
map.put("key3",6);
map.put("key4",1);
System.out.println("Map: "+map);