📜  Java TreeMap(1)

📅  最后修改于: 2023-12-03 14:42:16.924000             🧑  作者: Mango

Java TreeMap

Java TreeMap是Java集合框架中的一种数据结构,它是一个基于红黑树(Red-Black tree)实现的Map接口。TreeMap是按照Key排序的,因此在元素遍历时,TreeMap会按照Key值的升序输出。

TreeMap的特点
  • TreeMap是一个有序的集合,因此在遍历时会按照Key的升序输出;
  • TreeMap是通过红黑树实现的,因此查询、删除和插入的时间复杂度都是O(log n);
  • TreeMap的Key要求必须实现Comparable接口或者在构造函数中提供一个Comparator;
  • TreeMap不允许Key值为null,但允许Value为null;
  • TreeMap的迭代器是fail-fast迭代器,因此在迭代的过程中如果对集合进行修改,会抛出ConcurrentModificationException异常。
TreeMap的常用方法
构造方法
// 创建一个新的、空的TreeMap
TreeMap<K,V> treeMap = new TreeMap<K,V>();

// 根据指定的Comparator创建一个新的、空的TreeMap
TreeMap<K,V> treeMap = new TreeMap<K,V>(Comparator<? super K> comparator);

// 根据另一个Map创建一个新的TreeMap,新TreeMap的元素和顺序和原Map相同
TreeMap<K,V> treeMap = new TreeMap<K,V>(Map<? extends K,? extends V> map);

// 根据另一个SortedMap创建一个新的TreeMap,新TreeMap的元素和顺序和原SortedMap相同
TreeMap<K,V> treeMap = new TreeMap<K,V>(SortedMap<K,? extends V> map);
基本操作方法
// 返回当前TreeMap中元素的个数
int size()

// 判断当前TreeMap是否为空
boolean isEmpty()

// 判断当前TreeMap中是否包含指定的Key
boolean containsKey(Object key)

// 判断当前TreeMap中是否包含指定的Value
boolean containsValue(Object value)

// 根据指定的Key返回对应的Value,如果Key不存在,则返回null
V get(Object key)

// 将指定的Key和Value插入到TreeMap中,如果Key已经存在,则覆盖原有Value,并返回原有Value
V put(K key, V value)

// 根据指定的Key从TreeMap中删除对应的元素,如果Key不存在,则返回null
V remove(Object key)

// 清空当前TreeMap
void clear()
遍历方法
// 返回当前TreeMap中所有Key的Set
Set<K> keySet()

// 返回当前TreeMap中所有Value的Collection
Collection<V> values()

// 返回当前TreeMap中所有Entry的Set
Set<Map.Entry<K, V>> entrySet()
TreeMap示例代码
import java.util.*;
public class TestTreeMap {
    public static void main(String[] args) {
        /*
         * 创建一个TreeMap,TreeMap中的Key为String类型,Value为Integer类型
         * TreeMap会按照Key的升序排序
         */
        TreeMap<String, Integer> treeMap = new TreeMap<String, Integer>();

        /*
         * 插入元素
         */
        treeMap.put("A", 1);
        treeMap.put("B", 2);
        treeMap.put("C", 3);

        /*
         * 遍历元素,输出结果为:
         * A=1
         * B=2
         * C=3
         */
        for (Map.Entry<String, Integer> entry : treeMap.entrySet()) {
            System.out.println(entry.getKey() + "=" + entry.getValue());
        }

        /*
         * 删除元素
         */
        treeMap.remove("B");

        /*
         * 再次遍历元素,输出结果为:
         * A=1
         * C=3
         */
        for (Map.Entry<String, Integer> entry : treeMap.entrySet()) {
            System.out.println(entry.getKey() + "=" + entry.getValue());
        }
    }
}
总结

Java TreeMap是一种基于红黑树的有序Map集合,它具有高效的查询、删除和插入操作,同时还能保证元素的升序输出。在使用时需要注意的是,TreeMap要求Key值必须实现Comparable接口或者提供一个Comparator,同时在迭代器使用时需要注意fail-fast机制。