TreeMap默認(rèn)是升序的,如果我們需要改變排序方式,則需要使用比較器:Comparator。
Comparator可以對集合對象或者數(shù)組進(jìn)行排序的比較器接口,實(shí)現(xiàn)該接口的public compare(T o1,To2)方法即可實(shí)現(xiàn)排序,該方法主要是根據(jù)第一個(gè)參數(shù)o1,小于、等于或者大于o2分別返回負(fù)整數(shù)、0或者正整數(shù)。如下:
————————————————
public class TreeMapTest {
public static void main(String[] args) {
Map<String, Object> map = new TreeMap<String, Object>(
new Comparator() {
@Override
public int compare(String obj1, String obj2) {
// 降序排序
return obj2.compareTo(obj1);
}
});
map.put(“2019-03”, “ccccc”);
map.put(“2018-12”, “aaaaa”);
map.put(“2019-01”, “bbbbb”);
map.put(“2019-02”, “ddddd”);
————————————————
上面例子是對根據(jù)TreeMap的key值來進(jìn)行排序的,但是有時(shí)我們需要根據(jù)TreeMap的value來進(jìn)行排序。對value排序我們就需要借助于Collections的sort(List list, Comparator< super T> c)方法,該方法根據(jù)指定比較器產(chǎn)生的順序?qū)χ付斜磉M(jìn)行排序。但是有一個(gè)前提條件,那就是所有的元素都必須能夠根據(jù)所提供的比較器來進(jìn)行比較。如下:
public class TreeMapTest {
public static void main(String[] args) {
Map<String, String> map = new TreeMap<String, String>();
map.put(“c”, “2019-03”);
map.put(“a”, “2018-12”);
map.put(“b”, “2019-01”);
map.put(“d”, “2019-02”);
————————————————
//這里將map.entrySet()轉(zhuǎn)換成list
? ? List<Map.Entry<String,String>> list = new ArrayList<Map.Entry<String,String>>(map.entrySet());
? ? //然后通過比較器來實(shí)現(xiàn)排序
? ? Collections.sort(list,new Comparator<Map.Entry<String,String>>() {
? ? ? ? //升序排序
? ? ? ? @Override
? ? ? ? public int compare(Map.Entry<String, String> o1,
? ? ? ? ? ? ? ? ? ? ? ? ? Map.Entry<String, String> o2) {
? ? ? ? ? ? return o1.getValue().compareTo(o2.getValue());
? ? ? ? }
? ? });
? ? for(Map.Entry<String,String> mapping:list){
? ? ? System.out.println(mapping.getKey()+":"+mapping.getValue());
? ? }
}
————————————————
HashMap
我們都是HashMap的值是沒有順序的,他是按照key的HashCode來實(shí)現(xiàn)的。對于這個(gè)無序的HashMap我們要怎么來實(shí)現(xiàn)排序呢?參照TreeMap的value排序,我們一樣的也可以實(shí)現(xiàn)HashMap的排序。
public class HashMapTest {
public static void main(String[] args) {
Map<String, String> map = new HashMap<String, String>();
map.put(“c”, “2019-03”);
map.put(“a”, “2018-12”);
map.put(“b”, “2019-01”);
map.put(“d”, “2019-02”);
————————————————
List<Map.Entry<String,String>> list = new ArrayList<Map.Entry<String,String>>(map.entrySet());
? ? Collections.sort(list,new Comparator<Map.Entry<String,String>>() {
? ? ? ? //升序排序
? ? ? ? @Override
? ? ? ? public int compare(Map.Entry<String, String> o1,
? ? ? ? ? ? ? ? ? ? ? ? ? Map.Entry<String, String> o2) {
? ? ? ? ? ? return o1.getValue().compareTo(o2.getValue());
? ? ? ? }
? ? });
? ? for(Map.Entry<String,String> mapping:list){
? ? ? ? System.out.println(mapping.getKey()+":"+mapping.getValue());
? ? }
}
————————————————
版權(quán)聲明:本文為CSDN博主「蒙娜麗莎的Java」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/m0_60721514/article/details/123710706