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
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 に答える
0

LinkedHashMap は実際にはこれの優れたベースになる可能性がありますが、残念ながら、反復順序の操作は非常に制限されています。Apache common-collectionsの方が優れていると思います。

于 2012-08-14T13:17:36.973 に答える