TreeMap是Map接口基于红黑树的实现,键值对是有序的。

定义

public class TreeMap<K,V> extends AbstractMap<K,V> implements NavigableMap<K,V>, 
Cloneable, java.io.Serializable
  • TreeMap<K,V>:TreeMap是以key-value形式存储数据的。
  • extends AbstractMap<K,V>:继承了AbstractMap,实现Map接口时需要实现的工作量大大减少了。
  • implements NavigableMap:实现了NavigableMap,可以返回特定条件最近匹配的导航方法。
  • implements Cloneable:表明其可以调用clone()方法来返回实例的field-for-field拷贝。
  • implements Serializable:表明该类是可以序列化的。

构造方法

TreeMap有四种构造方法:

  1. TreeMap():使用key的自然排序来构造一个空的treeMap。
  2. TreeMap(Comparator<? super K> comparator):使用给定的比较器来构造一个空的treeMap。
  3. TreeMap(Map<? extends K, ? extends V> m):使用key的自然排序来构造一个treeMap,treeMap包含给定map中所有的键值对。
  4. TreeMap(SortedMap<K, ? extends V> m):使用指定的sortedMap来构造treeMap。treeMap中含有sortedMap中所有的键值对,键值对顺序和sortedMap中相同。

核心方法

size()
返回treeMap中键值对映射的个数

containsKey( Object key)
如果map中含有key为指定参数key的键值对,返回true

containsValue( Object value)
如果hashMap中的键值对有一对或多对的value等于参数value,返回true.

get(Object key)
返回指定的key对应的value,如果value为null,则返回null

firstKey()
返回treeMap中的第一个节点的key

Comparator<? super K> comparator()
返回comparator

lastKey()
返回treeMap中的最后一个节点的key

getEntry( Object key)
返回参数key对应的节点

getEntryUsingComparator( Object key)
使用comparator获取节点。

getCeilingEntry( K key)
获取TreeMap中大于/等于key的最小的节点,若不存在,就返回null

getFloorEntry( K key)
获取TreeMap中小于/等于key的最大的节点,若不存在,就返回null

getHigherEntry( K key)
获取TreeMap中大于key的最小的节点,若不存在,返回null

getLowerEntry( K key)
获取TreeMap中小于key的最大的节点,若不存在,就返回null

put( K key, V value)
将指定参数key和指定参数value插入map中,如果key已经存在,那就替换key对应的value、

remove( Object key)
如果key在treeMap中存在,删除对应的节点,返回旧value,否则返回null

clear()
删除map中所有的键值对

TreeMap与HashMap比较

不同点

不同点 HashMap TreeMap
数据结构 数组+链表+红黑树 红黑树
是否有序
是否实现NavigableMap
是否允许key为null
增删改查操作的时间复杂度 O(1) log(n)

相同点

  • 都以键值对的形式存储数据。
  • 都继承了AbstractMap,实现了Map、Cloneable、Serializable。
  • 都是非同步的。