0

我正在尝试找到一个类似于 LinkedHashMap 的结构,该结构按其值对其进行排序。我需要能够更新这些值。我会经常检查订单,所以我需要一个避免每次都对地图进行排序的解决方案。

像这样的东西:

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}

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

谢谢你的帮助,

4

3 回答 3

1

我认为您正在寻找类似 TreeMap 的东西,它是按键排序的:

SortedMap<String, Integer> map = new TreeMap<String, Integer>(); 
于 2012-08-14T12:28:10.770 回答
0

尽管 LinkedHashMap 实际上可能是一个很好的基础,但不幸的是它在操作迭代顺序方面非常有限。我认为使用apache common-collections你会更好。

于 2012-08-14T13:17:36.973 回答
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);
于 2012-08-14T14:41:42.080 回答