HashMapソートの一例

2179 ワード

Userにはname(String)とage(int)性があるHashMap集合が知られている.HashMapのソート機能を実装する方法を書いてください.この方法では、HashMapがパラメータであり、戻りタイプがHashMapであり、HashMapのUserのage逆シーケンスをソートする必要があります.ソート時にkey=valueキー値ペアは分解できません.分析:HashMap自体はソートできませんが、この問題はHashMapにソートさせなければなりません.APIにこのようなMap構造が秩序化されているかどうかを考えなければなりません.LinkedHashMap、はい、彼です.彼はMap構造で、チェーンテーブル構造で、秩序化されています.もっと喜ばしいのは彼がHashMapのサブクラスです.LinkedHashMapに戻ればいいです.インタフェース向け(親プログラミングの考え方)にも合致します.
    public static void main(String[] args) {
    	//      
        HashMap users = new HashMap<>();
        users.put(1, new User("  ", 25));
        users.put(3, new User("  ", 22));
        users.put(2, new User("  ", 28));
        System.out.println(users);
        HashMap sortHashMap = sortHashMap(users); 
        System.out.println(sortHashMap);
    /**
     *         * {1=User [name=  , age=25], 2=User [name=  , age=28], 3=User [name=  , age=22]} {2=User [name=  , age=28], 1=User [name=  , age=25], 3=User [name=  , age=22]}
     */
    }
    //      
    public static HashMap sortHashMap(HashMap map) {
        //      map       
        Set> entrySet = map.entrySet();
        //   set      List   ,   ,            
        List> list = new ArrayList>(entrySet);
        //    Collections        list     ,              
        Collections.sort(list, new Comparator>() {
            @Override
            public int compare(Entry o1, Entry o2) { //       User   age       
                return o2.getValue().getAge() - o1.getValue().getAge();
            }
        });
        //          HashMap      
        LinkedHashMap linkedHashMap = new LinkedHashMap();
        //  List         LinkedHashMap  
        for (Entry entry : list) {
            linkedHashMap.put(entry.getKey(), entry.getValue());
        }
        //    
        return linkedHashMap;
    }