工做中遇到这样一个问题,须要一个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 (){
@Override
public int compare(String o1, String o2) {
return o2.compareTo(o1);
}
});
//注意,compareTo是字符串比较方法,只须要记住倒序,让o2和o1去比较便可。
//对数字进行排序:
Map treeMapIntDesc = new TreeMap(new Comparator() {
@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覆盖掉。字符串