基于红黑二叉树实现,线程非安全,不允许键对象是null,key不可以重复,value允许重复,存入TreeMap的元素应当实现Comparable接口或者实现Comparator接口,会按照排序后的顺序迭代元素,默认升序,两个相比较的key不得抛出classCastException。主要用于存入元素的时候对元素进行自动排序,迭代输出的时候就按排序顺序输出。
1. 构造函数:
- 默认构造函数。使用该构造函数,TreeMap中的元素按照自然排序进行排列。
TreeMap() - 构造一个TreeMap,并将某个映射表中的所有条目添加到TreeMap中
TreeMap(Map extends K, ? extends V> m) - 构造一个TreeMap,并指定Tree的比较器的建进行排序
TreeMap(Comparator super K> comparator) - 构造一个TreeMap,并将某个映射表中的所有条目添加到TreeMap中,并使用与给定的有序映射表相同的比较器
TreeMap(SortedMapm)
2.常用方法:
1.public int size() 返回此映射中键 - 值映射的数量。
2.public boolean containsKey(Object key) 如果此映射包含指定键的映射,则返回true。
- public boolean containsValue(Object value) 如果此映射将一个或多个键映射到指定值,则返回true。
public class Test {
public static void main(String[] args) {
TreeMap map = new TreeMap<>();
map.put(1, null);
map.put(10, 1);
map.put(3, 2);
map.put(2, 3);
System.out.println(map.size());//4
System.out.println(map.containsKey(1));//true
System.out.println(map.containsValue(4));//false
}
}
- public K ceilingKey(K key) 如果不存在这样的键在方法调用返回的最小键大于或等于键,则返回null。
public static void main(String[] args) {
TreeMap treemap = new TreeMap();
treemap.put(2, "two");
treemap.put(1, "one");
treemap.put(3, "three");
treemap.put(6, "six");
treemap.put(5, "five");
System.out.println(treemap.ceilingKey(4));//5
System.out.println( treemap.ceilingKey(5));//5
System.out.println( treemap.ceilingKey(7));//null
}
}
- public Object clone() 返回集合的副本
public class Test {
public static void main(String[] args) {
TreeMap map = new TreeMap<>();
map.put(10, "Geeks");
map.put(15, "4");
map.put(20, "Geeks");
map.put(25, "Welcomes");
map.put(30, "You");
// Displaying the TreeMap
System.out.println(map);
System.out.println(map.clone());
}
}
输出:
{10=Geeks, 15=4, 20=Geeks, 25=Welcomes, 30=You}
{10=Geeks, 15=4, 20=Geeks, 25=Welcomes, 30=You}
6.public Comparator super K> comparator() 方法调用返回用于排序在这个映射上,或者为null键,如果此映射使用键的自然顺序比较
public static void main(String[] args) {
TreeMap map = new TreeMap();
// populating tree map
map.put(2, "two");
map.put(1, "one");
map.put(3, "three");
map.put(6, "six");
map.put(5, "five");
Comparator comp = treemap.comparator();
System.out.println("Comparator value: "+ comp);
}
}
输出:
Comparator value: null
7 Map.Entry
public static void main(String[] args) {
TreeMap map = new TreeMap<>();
map.put(10, "Geeks");
map.put(15, "4");
map.put(20, "Geeks");
map.put(25, "Welcomes");
map.put(30, "You");
System.out.println(map.ceilingEntry(10));//10=Geeks
System.out.println( map.ceilingEntry(15));//15=4
}
- public void clear()从此映射中删除所有映射。此调用返回后,映射将为空。
public static void main(String[] args) {
TreeMap map = new TreeMap<>();
map.put(10, "Geeks");
map.put(15, "4");
map.put(20, "Geeks");
map.put(25, "Welcomes");
map.put(30, "You");
map.clear();
System.out.println(map);//{}
}
3.遍历方法:
- 用TreeMap的keySet()方法,生成的对象是由key对象组成的Set,再利用TreeMap的get(key)方法,得到对应的value值
public static void main(String[] args) {
TreeMap map = new TreeMap<>();
map.put(10, "Geeks");
map.put(15, "4");
map.put(20, "Geeks");
map.put(25, "Welcomes");
map.put(30, "You");
Iterator it = map.keySet().iterator();
while (it.hasNext())
System.out.println(map.get(it.next()));
}
}
输出:
Geeks
4
Geeks
Welcomes
You
2.利用entrySet()
TreeMap map = new TreeMap<>();
map.put(1, null);
map.put(10, 1);
map.put(3, 2);
map.put(2, 3);
for(Entry entry:map.entrySet())
{
System.out.println(entry.getKey()+":"+entry.getValue());
}
输出:
1:null
2:3
3:2
10:1