HashMap要素のソートの実装

5174 ワード

HashMap要素のソートの実装HashMapの集合が知られており、Userにはname(String)およびage(int)属性があります.HashMapのソート機能を実装する方法を書いてください.この方法は、HashMap がパラメータであり、戻りタイプがHashMapであり、HashMapのUserのage逆シーケンスをソートすることを要求します.ソート時にkey=valueキー値ペアは分解できません.HashMap自体はソートできませんが、この問題はHashMapにソートさせなければなりません.APIにこのようなMap構造が秩序化されているかどうかを考えなければなりません.LinkedHashMap、はい、彼です.彼はMap構造で、チェーンテーブル構造でもあります.秩序化されています.もっと喜ばしいのは彼がHashMapのサブクラスです.私たちはLinkedHashMapに戻って、インタフェースにも合っています.(親プログラミングの考え方).しかし、集合に対する操作は、JDKのAPIでJDKのAPIがあることを原則としなければならない.例えば、ソートアルゴリズムでは泡を出したり選択したりするのではなく、まずCollectionsで集合ツールクラスを考えなければならない.
public class CollectionsTest {
    public static void main(String[] args) {
        List list = Collections.synchronizedList(new ArrayList());
        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(Map.Entry o1, Map.Entry o2) {
                //       User   age       
                return o2.getValue().getAge() - o1.getValue().getAge();
            }
        });
        //          HashMap      
        LinkedHashMap linkedHashMap = new LinkedHashMap();
        //  List         LinkedHashMap  
        for (Map.Entry entry : list) {
            linkedHashMap.put(entry.getKey(), entry.getValue());
        }
        //    
        return linkedHashMap;
    }
}
class User {
    String name;
    int age;
    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}