Java TreeMap
精华
小牛编辑
195浏览
2023-03-14
1 什么是Java TreeMap
Java TreeMap类是基于红黑树的实现。它提供了一种有效的方法来按排序顺序存储键值对。
关于Java TreeMap类的核心要点是:
- Java TreeMap存储key-value对。它实现了NavigableMap接口并继承了AbstractMap类。
- Java TreeMap不能存储重复元素。
- Java TreeMap不能包含一个null键,但是可以包含多个null值。
- Java TreeMap是非同步(线程不安全的)。
- Java TreeMap元素是有序的(升序)。
2 Java TreeMap的语法
public class TreeMap<K,V> extends AbstractMap<K,V> implements NavigableMap<K,V>, Cloneable, Serializable
3 Java TreeMap的构造方法
构造方法 | 描述 |
---|---|
TreeMap() | 用于构造一个空的TreeMap,该TreeMap将使用其键的自然顺序进行排序。 |
TreeMap(Comparator<? super K> comparator) | 用于构造一个空TreeMap,该TreeMap将使用比较器进行排序。 |
TreeMap(Map<? extends K,? extends V> m) | 用于指定Map的条目来初始化TreeMap,该TreeMap将使用键的自然顺序进行排序。 |
TreeMap(SortedMap<K,? extends V> m) | 用于使用SortedMap中的条目初始化TreeMap,这些条目将以与SortedMap相同的顺序排序。 |
4 Java TreeMap的方法
方法 | 描述 |
---|---|
Map.Entry<K,V> ceilingEntry(K key) | 返回具有最小键值(大于或等于指定键)的键值对,如果没有这样的键,则返回null。 |
K ceilingKey(K key) | 返回最小键,大于指定键;如果没有这样的键,则返回null。 |
void clear() | 删除Map的所有键值对。 |
Object clone() | 返回TreeMap实例的浅表副本。 |
Comparator<? super K> comparator() | 返回按顺序排列键的比较器;如果映射使用自然顺序,则返回null。 |
NavigableSet<K> descendingKeySet() | 返回Map中所有key的逆序NavigableSet集合。 |
NavigableMap<K,V> descendingMap() | 以降序返回指定的键值对。 |
Map.Entry firstEntry() | 返回键值最小的键值对。 |
Map.Entry<K,V> floorEntry(K key) | 返回最大的键,小于或等于指定的键;如果没有这样的键,则返回null。 |
void forEach(BiConsumer<? super K,? super V> action) | 对Map中的每个条目执行给定的操作,直到所有条目都已处理或该操作引发异常为止。 |
SortedMap<K,V> headMap(K toKey) | 返回键值严格小于toKey的键值对。 |
NavigableMap<K,V> headMap(K toKey, boolean inclusive) | 返回其键小于(或等于(如果包含)为true的话)toKey的键值对。 |
Map.Entry<K,V> higherEntry(K key) | 返回严格大于给定键的最小键;如果没有这样的键,则返回null。 |
K higherKey(K key) | 如果Map包含指定键的映射,则用于返回true。 |
Set keySet() | 返回Map中所有Entry(键值对)的集合。 |
Map.Entry<K,V> lastEntry() | 返回具有最大键的键值对;如果没有这样的键,则返回null。 |
Map.Entry<K,V> lowerEntry(K key) | 返回与最大键严格小于给定键的key-value的Entry对象;如果没有这样的键,则返回null。 |
K lowerKey(K key) | 返回的最大key严格小于给定的key;如果没有这样的key,则返回null。 |
NavigableSet<K> navigableKeySet() | 返回Map中包含所有key的NavigableSet集合。 |
Map.Entry<K,V> pollFirstEntry() | 删除并返回与Map中最小键关联的key-value映射;如果映射为空,则返回null。 |
Map.Entry<K,V> pollLastEntry() | 删除并返回与Map中最大键关联的key-value映射;如果映射为空,则返回null。 |
V put(K key, V value) | 在Map中插入具有指定键的指定值。 |
void putAll(Map<? extends K,? extends V> map) | 用于将所有键值对从一个Map复制到另一个Map。 |
V replace(K key, V value) | 将指定的值替换为指定的键。 |
boolean replace(K key, V oldValue, V newValue) | 用指定键的新值替换旧值。 |
void replaceAll(BiFunction<? super K,? super V,? extends V> function) | 用在该条目上调用给定函数的结果替换每个条目的值,直到处理完所有条目或该函数引发异常为止。 |
NavigableMap<K,V> subMap(K fromKey, boolean fromInclusive, K toKey, boolean toInclusive) | 返回key-value对,其键的范围从fromKey到toKey。 |
SortedMap<K,V> subMap(K fromKey, K toKey) | 返回key-value对,其键的范围从fromKey(包括)到toKey(不包括)。 |
SortedMap<K,V> tailMap(K fromKey) | 返回键值大于或等于fromKey的键值对。 |
NavigableMap<K,V> tailMap(K fromKey, boolean inclusive) | 从键返回大于(或等于,如果包含在内,则为真)的键/值对。 |
boolean containsKey(Object key) | 如果Map包含指定key的映射,则返回true。 |
boolean containsValue(Object value) | 如果Map将一个或多个key映射到指定值,则返回true。 |
K firstKey() | 用于返回TreeMap中当前的第一个(最低)键。 |
V get(Object key) | 用于返回TreeMap将指定键映射到的值。 |
K lastKey() | 用于返回TreeMap中当前的最后一个(最高)键。 |
V remove(Object key) | 从TreeMap中删除指定键的键值对。 |
Set<Map.Entry<K,V>> entrySet() | 返回TreeMap中所有Entry的集合。 |
int size() | 返回哈希表中存在的键值对的数量。 |
Collection values() | 返回TreeMap中包含value的集合。 |
5 Java TreeMap的例子
package cn.xnip;
/**
* 小牛知识库网: https://www.xnip.cn
*/
/**
* Java TreeMap的例子
*/
import java.util.*;
class Demo{
public static void main(String args[]){
TreeMap<Integer,String> map=new TreeMap<Integer,String>();
map.put(100,"Eric");
map.put(102,"Jack");
map.put(101,"Mark");
map.put(103,"Rose");
for(Map.Entry m:map.entrySet()){
System.out.println(m.getKey()+" "+m.getValue());
}
}
}
输出结果为:
100 Eric
101 Mark
102 Jack
103 Rose
6 Java TreeMap的例子:remove()
package cn.xnip;
/**
* 小牛知识库网: https://www.xnip.cn
*/
/**
* Java TreeMap的例子
*/
import java.util.*;
public class Demo {
public static void main(String args[]) {
TreeMap<Integer,String> map=new TreeMap<Integer,String>();
map.put(100,"Eric");
map.put(102,"Jack");
map.put(101,"Rose");
map.put(103,"Lucy");
System.out.println("执行remove()方法前");
for(Map.Entry m:map.entrySet())
{
System.out.println(m.getKey()+" "+m.getValue());
}
map.remove(102);
System.out.println("执行remove()方法后");
for(Map.Entry m:map.entrySet())
{
System.out.println(m.getKey()+" "+m.getValue());
}
}
}
输出结果为:
执行remove()方法前
100 Eric
101 Rose
102 Jack
103 Lucy
执行remove()方法后
100 Eric
101 Rose
103 Lucy
7 Java TreeMap的例子:NavigableMap
package cn.xnip;
/**
* 小牛知识库网: https://www.xnip.cn
*/
/**
* Java TreeMap的例子
*/
import java.util.*;
class Demo{
public static void main(String args[]){
NavigableMap<Integer,String> map=new TreeMap<Integer,String>();
map.put(100,"Eric");
map.put(102,"Jack");
map.put(101,"Mark");
map.put(103,"Rose");
//保持降序
System.out.println("descendingMap: "+map.descendingMap());
//返回键值小于或等于指定键的键值对。
System.out.println("headMap: "+map.headMap(102,true));
//返回键值大于或等于指定键的键值对。
System.out.println("tailMap: "+map.tailMap(102,true));
//返回键值对存在于指定键之间。
System.out.println("subMap: "+map.subMap(100, false, 102, true));
}
}
输出结果为:
descendingMap: {103=Rose, 102=Jack, 101=Mark, 100=Eric}
headMap: {100=Eric, 101=Mark, 102=Jack}
tailMap: {102=Jack, 103=Rose}
subMap: {101=Mark, 102=Jack}
8 Java TreeMap的例子:SortedMap
package cn.xnip;
/**
* 小牛知识库网: https://www.xnip.cn
*/
/**
* Java TreeMap的例子
*/
import java.util.*;
class Demo{
public static void main(String args[]){
SortedMap<Integer,String> map=new TreeMap<Integer,String>();
map.put(100,"Eric");
map.put(102,"Jack");
map.put(101,"Paul");
map.put(103,"Lucas");
//返回键小于指定键的键值对。
System.out.println("headMap: "+map.headMap(102));
//返回键值大于或等于指定键的键值对。
System.out.println("tailMap: "+map.tailMap(102));
//返回键值对存在于指定键之间。
System.out.println("subMap: "+map.subMap(100, 102));
}
}
输出结果为:
headMap: {100=Eric, 101=Paul}
tailMap: {102=Jack, 103=Lucas}
subMap: {100=Eric, 101=Paul}
9 HashMap和TreeMap的区别
HashMap | TreeMap |
---|---|
HashMap可以包含一个Null键。 | TreeMap不能包含任何Null键。 |
HashMap的元素是无序的。 | TreeMap的元素是有序的(升序)。 |