TreeMap:
一种键值按照自然顺序排序的Map,底层保证有序的结构是红黑树
自然排序:基本数据类型会按照ASCII码表排序,String类会按照字典序排序。
也可以自己自定义排序,看TreeMap的构造函数
public TreeMap(Comparator<? super K> comparator) {
this.comparator = comparator;
}
可以传入一个Comparator比较器,自定义排序
public class Demo {
public static void main(String[] args) {
Map<Goods, String> map = new TreeMap(new Comparator<Goods>() {
@Override
public int compare(Goods o1, Goods o2) {
if(o1.getPrice() > o2.getPrice()) {
return 1;
}else if(o1.getPrice() < o2.getPrice()) {
return -1;
}
return 0;
}
});
Goods goods = new Goods("b", 23);
Goods goods2 = new Goods("a", 24);
map.put(goods, "1");
map.put(goods2, "2");
for(java.util.Map.Entry<Goods, String> entry : map.entrySet()) {
System.err.println("键:" + entry.getKey() +" 值:"+ map.values());
}
}
}
LinkedHashMap
可以按照键的插入顺序和访问顺序进行排序的Map,是基于HashMap和双向链表来实现的
1. 下面这个例子就是展示 LinkedHashMap按照插入顺序进行输出结果的Demo
public class Demo {
public static void main(String[] args) {
Map<String, String> map = new LinkedHashMap<>();
map.put("b", "21");
map.put("a", "212");
map.put("c", "32");
map.get("a");
for(Map.Entry<String,String> entry : map.entrySet()) {
System.err.println(entry.getKey()+";"+entry.getValue());
}
/* 输出结果
* b;21
a;212
c;32*/
}
}