java對map進行排序(對日期倒敘)

工做中遇到這樣一個問題,須要一個map,key中存放的是日期好比 2016-01-01,可是我還須要對這個map中的日期倒序排列。 ###首先有下面兩個概念 HashMap:咱們最經常使用的Map,它根據key的HashCode 值來存儲數據,根據key能夠直接獲取它的Value,同時它具備很快的訪問速度。HashMap最多隻容許一條記錄的key值爲Null(多條會覆蓋);容許多條記錄的Value爲 Null。非同步的。 TreeMap: 可以把它保存的記錄根據key排序,默認是按升序排序,也能夠指定排序的比較器,當用Iterator 遍歷TreeMap時,獲得的記錄是排過序的。TreeMap不容許key的值爲null。非同步的。

因此咱們若是使用TreeMap就能夠對日期進行排列ide

String s1 = "2016-01-02";
        String s2 = "2016-01-03";
        String s3 = "2016-02-02";
        String s4 = "2016-02-03";

        Map treeMapDefalut = new TreeMap();
        treeMapDefalut.put(s1,1);
        treeMapDefalut.put(s2,1);
        treeMapDefalut.put(s3,1);
        treeMapDefalut.put(s4,1);
        System.out.println(treeMapDefalut);

可是結果倒是:{2016-01-02=1, 2016-01-03=1, 2016-02-02=1, 2016-02-03=1} 按照字符串升序排列,因此咱們得實現比較器code

Map treeMapDesc = new TreeMap(new Comparator<String> (){
            @Override
            public int compare(String o1, String o2) {
                return o2.compareTo(o1);
            }
 });
//注意,compareTo是字符串比較方法,只須要記住倒序,讓o2和o1去比較便可。
//對數字進行排序:   
        Map treeMapIntDesc = new TreeMap(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2-o1;
            }

        });   

      treeMapDesc.put(s1,1);
        treeMapDesc.put(s2,1);
        treeMapDesc.put(s3,1);
        treeMapDesc.put(s4,1);
        System.out.println(treeMapDesc);

結果:{2016-02-03=1, 2016-02-02=1, 2016-01-03=1, 2016-01-02=1} 達到目的排序

若是比較的兩個key值相等(即比較結果爲0),則會被後添加進去的key-value覆蓋掉。字符串

相關文章
相關標籤/搜索