LinkedHashMap按值排序

时间:2012-08-14 12:23:53

标签: java sorting hashmap linkedhashmap

我正在尝试找到一个类似于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}

是否有任何结构允许这个? 如果没有,有任何关于如何做的想法吗?

感谢您的帮助,

3 个答案:

答案 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);