TreeMap 简介
TreeMap 是一个有序的key-value集合,它是通过红黑树实现的。
TreeMap 继承于AbstractMap,所以它是一个Map,即一个key-value集合。
TreeMap 实现了NavigableMap接口,意味着它支持一系列的导航方法。比如返回有序的key集合。
TreeMap 实现了Cloneable接口,意味着它能被克隆。
TreeMap 实现了java.io.Serializable接口,意味着它支持序列化。
TreeMap基于红黑树(Red-Black tree)实现。该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。
TreeMap的基本操作 containsKey、get、put 和 remove 的时间复杂度是 log(n) 。
另外,TreeMap是非同步的。 它的iterator 方法返回的迭代器是fail-fastl的。
TreeMap是一个二叉树的数据结构;TreeMap不允许出现相同的键
TreeMap的构造函数
// 默认构造函数。使用该构造函数,TreeMap中的元素按照自然排序进行排列。 TreeMap() // 创建一个与给定映射具有相同映射关系的TreeMap,该映射根据其键的自然顺序进行排序 TreeMap(Map<? extends K, ? extends V> copyFrom) // 指定TreeMap的比较器 TreeMap(Comparator<? super K> comparator) // 创建一个与指定有序映射具有相同映射关系和相同排序顺序的TreeMap TreeMap(SortedMap<K, ? extends V> copyFrom)
在添加、删除和定位映射关系上,TreeMap类要比HashMap类的性能差一些,但是其中的映射关系具有一定的顺序。
如果不需要一个有序的集合,则建议使用HashMap类;如果需要进行有序的遍历输出,则建议使用TreeMap类。
代码:
- import java.util.Collections;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.Map;
- import java.util.TreeMap;
- public class TestCollection {
- public static void main(String[] args) {
- System.out.println("开始:");
- Person person1 = new Person("马先生", 220181);
- Person person2 = new Person("李先生", 220193);
- Person person3 = new Person("王小姐", 220186);
- Map<Number, Person> map = new HashMap<Number, Person>();
- map.put(person1.getId_card(), person1);
- map.put(person2.getId_card(), person2);
- map.put(person3.getId_card(), person3);
- // HashMap
- System.out.println("HashMap,无序:");
- for (Iterator<Number> it = map.keySet().iterator(); it.hasNext();) {
- Person person = map.get(it.next());
- System.out.println(person.getId_card() + " " + person.getName());
- }
- // TreeMap
- System.out.println("TreeMap,升序:");
- TreeMap<Number, Person> treeMap = new TreeMap<Number, Person>();
- treeMap.putAll(map);
- for (Iterator<Number> it = treeMap.keySet().iterator(); it.hasNext();) {
- Person person = treeMap.get(it.next());
- System.out.println(person.getId_card() + " " + person.getName());
- }
- System.out.println("TreeMap,降序:");
- TreeMap<Number, Person> treeMap2 =
- new TreeMap<Number, Person>(Collections.reverseOrder());
- treeMap2.putAll(map);
- for (Iterator it = treeMap2.keySet().iterator(); it.hasNext();) {
- Person person = (Person) treeMap2.get(it.next());
- System.out.println(person.getId_card() + " " + person.getName());
- }
- System.out.println("结束!");
- }
- }