工做中遇到這樣一個問題,須要一個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覆蓋掉。字符串