謙虛使人進(jìn)步
想要了解一個(gè)類,就可以從它實(shí)現(xiàn)的接口和繼承的父類開(kāi)始。我們可以看到TreeMap實(shí)現(xiàn)了java.util.NavigableMap接口锣枝,NavigableMap它又繼承了排序Map接口 java.util.SortedMap,因此TreeMap具有排序能力;其次零远,TreeMap實(shí)現(xiàn)了Cloneable和Serializable接口,它也具備克隆和序列化能力
TreeMap底層由紅黑樹
實(shí)現(xiàn)厌蔽,按照Key的自然順序升序
或者實(shí)現(xiàn)Comprator接口進(jìn)行自定義排序
牵辣。且TreeMap的排序特性只作用在key上。如果需要value也跟著排序就需要使用一些別的手段奴饮。
排序特性
按key排序
默認(rèn)按key升序排列
package com.springboot.study.demo1;
import java.util.*;
public class Test {
public static void main(String[] args) {
TreeMap<String, String> treeMap = new TreeMap<String, String>() {{
put("3", "1");
put("1", "3");
put("2", "2");
}};
for (String s : treeMap.keySet()) {
System.out.println(s+"==>"+treeMap.get(s));
}
}
}
按key降序排列
package com.springboot.study.demo1;
import java.util.*;
public class Test {
public static void main(String[] args) {
TreeMap<String, String> treeMap = new TreeMap<String, String>(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o2.compareTo(o1);
}
}) {{
put("3", "1");
put("1", "2");
put("2", "3");
}};
for (String s : treeMap.keySet()) {
System.out.println(s + "==>" + treeMap.get(s));
}
}
}
按value排序
如果需要value也跟著排序就需要使用一些別的手段纬向。當(dāng)然HashMap的value排序也可以使用這種方法
將Map轉(zhuǎn)為 List<Map.Entry>,然后使用java.util.Collections工具類來(lái)排序戴卜。當(dāng)然這種方法也適用于HashMap
package com.springboot.study.demo1;
import java.util.*;
import java.util.stream.Collectors;
public class Test {
public static void main(String[] args) {
Map<String, String> treeMap = new HashMap<String, String>() {{
put("3", "1");
put("1", "2");
put("2", "3");
}};
//將Map轉(zhuǎn)為 List<Map.Entry>
List<Map.Entry<String, String>> list = new ArrayList<>(treeMap.entrySet());
//按照
Collections.sort(list,new Comparator<Map.Entry<String,String>>() {
//升序排序
public int compare(Map.Entry<String, String> o1, Map.Entry<String, String> o2) {
return o1.getValue().compareTo(o2.getValue());
}
});
for (Map.Entry<String, String> e: list) {
System.out.println(e.getKey()+"==>"+e.getValue());
}
}
}
性能特性
TreeMap的優(yōu)勢(shì)在于能夠?qū)崿F(xiàn)
自定義排序功能
逾条,但是性能要比HashMap和LinkedHashMap差。它的 containsKey 投剥、get 师脂、 put 、remove 方法的時(shí)間復(fù)雜度是 log(n)雖然LinkedHashMap也是有序的,但是LinkedHashMap內(nèi)元素順序只和插入順序有關(guān)危彩,無(wú)法進(jìn)行自定義排序