文章图片
【Java TreeMap类】Java TreeMap类是基于红黑树的实现。它提供了一种按排序顺序存储键值对的有效方法。
关于Java TreeMap类的要点是:
- Java TreeMap包含基于键的值。它实现了NavigableMap接口并扩展了AbstractMap类。
- Java TreeMap仅包含唯一元素。
- Java TreeMap不能具有null键, 但是可以具有多个null值。
- Java TreeMap不同步。
- Java TreeMap保持升序。
我们来看一下java.util.TreeMap类的声明。
public class TreeMap<
K, V>
extends AbstractMap<
K, V>
implements NavigableMap<
K, V>
, Cloneable, Serializable
TreeMap类参数
让我们看一下java.util.TreeMap类的参数。
- K:这是此地图维护的键的类型。
- V:这是映射值的类型。
建设者 | 描述 |
---|---|
TreeMap() | 它用于构造一个空的树图, 该树图将使用其键的自然顺序进行排序。 |
TreeMap(Comparator < ?super K> 比较器) | 它用于构造一个空的基于树的映射, 该映射将使用比较器comp进行排序。 |
TreeMap(Map < ?扩展K , ?扩展V> m) | 它用于使用m中的条目初始化树图, 该树图将使用键的自然顺序进行排序。 |
TreeMap(SortedMap < K , ?扩展V> m) | 它用于使用SortedMap sm中的条目初始化树图, 这些条目将以与sm相同的顺序排序。 |
方法 | 描述 |
---|---|
Map.Entry < K, V> ceilingEntry(K键) | 它返回具有最小键值(大于或等于指定键)的键值对, 如果没有这样的键, 则返回null。 |
K ceilingKey(K key) | 它返回最小的键, 大于指定的键;如果没有这样的键, 则返回null。 |
void clear() | 它将所有键值对从映射中删除。 |
Object clone() | 它返回TreeMap实例的浅表副本。 |
比较器< ?超级K> 比较器() | 它返回按顺序排列键的比较器;如果映射使用自然顺序, 则返回null。 |
NavigableSet < K> endingKeySet() | 它返回映射中包含的键的逆序NavigableSet视图。 |
NavigableMap < K, V> 结尾地图() | 它以降序返回指定的键值对。 |
Map.Entry firstEntry() | 它返回键值最小的键值对。 |
Map.Entry < K, V> floorEntry(K键) | 它返回最大的键, 小于或等于指定的键;如果没有这样的键, 则返回null。 |
void forEach(BiConsumer < ?super K, ?super V> 操作) | 它对映射中的每个条目执行给定的操作, 直到所有条目都已处理或该操作引发异常为止。 |
SortedMap < K, V> headMap(K toKey) | 它返回键值严格小于toKey的键值对。 |
NavigableMap < K, V> headMap(K toKey, 包含布尔值) | 它返回其键小于(或等于(如果包含)为true的话)toKey的键值对。 |
Map.Entry < K, V> HigherEntry(K键) | 它返回严格大于给定键的最小键;如果没有这样的键, 则返回null。 |
K higherKey(K key) | 如果此映射包含指定键的映射, 则用于返回true。 |
Set
|
它返回映射中存在的键的集合。 |
Map.Entry < K, V> lastEntry() | 它返回具有最大键的键值对;如果没有这样的键, 则返回null。 |
Map.Entry < K, V> lowerEntry(K键) | 它返回与最大键严格小于给定键的键-值映射关系;如果没有这样的键, 则返回null。 |
K lowerKey(K key) | 它返回的最大密钥严格小于给定的密钥;如果没有这样的密钥, 则返回null。 |
NavigableSet < K> navigableKeySet() | 它返回此映射中包含的键的NavigableSet视图。 |
Map.Entry < K, V> pollFirstEntry() | 它删除并返回与此映射中最小键关联的键-值映射;如果映射为空, 则返回null。 |
Map.Entry < K, V> pollLastEntry() | 它删除并返回与此映射中最大键关联的键-值映射;如果映射为空, 则返回null。 |
V put(K key, V value) | 它在地图中插入具有指定键的指定值。 |
void putAll(Map < ?扩展K , ?扩展V> map) | 它用于将所有键值对从一个映射复制到另一个映射。 |
V replace(K key, V value) | 它将指定的值替换为指定的键。 |
boolean replace(K key, V oldValue, V newValue) | 它用指定键的新值替换旧值。 |
void replaceAll(BiFunction < ?super K, ?super V, ?extended V> 函数) | 它用在该条目上调用给定函数的结果替换每个条目的值, 直到处理完所有条目或该函数引发异常为止。 |
NavigableMap < K, V> 子映射(K fromKey, boolean fromInclusive, K toKey, boolean toInclusive) | 它返回键-值对, 其键的范围从fromKey到toKey。 |
SortedMap < K, V> 子地图 | 它返回键-值对, 其键的范围从fromKey(包括)到toKey(不包括)。 |
SortedMap < K, V> tailMap(K fromKey) | 它返回键值大于或等于fromKey的键值对。 |
NavigableMap < K, V> tailMap(K fromKey, 包含布尔值) | 它从键返回大于(或等于, 如果包含在内, 则为真)的键/值对。 |
boolean containsKey(Object key) | 如果映射包含指定键的映射, 则返回true。 |
boolean containsValue(Object value) | 如果映射将一个或多个键映射到指定值, 则返回true。 |
K firstKey() | 它用于返回此排序映射中当前的第一个(最低)键。 |
V get(Object key) | 它用于返回映射将指定键映射到的值。 |
K lastKey() | 它用于返回排序映射中当前的最后一个(最高)键。 |
V remove(Object key) | 它从映射中删除指定键的键值对。 |
Set < Map.Entry < K, V > > entrySet() | 它返回映射中包含的映射的设置视图。 |
int size() | 它返回哈希表中存在的键值对的数量。 |
Collection
|
它返回映射中包含的值的集合视图。 |
import java.util.*;
class TreeMap1{
public static void main(String args[]){
TreeMap<
Integer, String>
map=new TreeMap<
Integer, String>
();
map.put(100, "Amit");
map.put(102, "Ravi");
map.put(101, "Vijay");
map.put(103, "Rahul");
for(Map.Entry m:map.entrySet()){
System.out.println(m.getKey()+" "+m.getValue());
}
}
}
Output:100 Amit
101 Vijay
102 Ravi
103 Rahul
Java TreeMap示例:remove()
import java.util.*;
public class TreeMap2 {
public static void main(String args[]) {
TreeMap<
Integer, String>
map=new TreeMap<
Integer, String>
();
map.put(100, "Amit");
map.put(102, "Ravi");
map.put(101, "Vijay");
map.put(103, "Rahul");
System.out.println("Before invoking remove() method");
for(Map.Entry m:map.entrySet())
{
System.out.println(m.getKey()+" "+m.getValue());
}
map.remove(102);
System.out.println("After invoking remove() method");
for(Map.Entry m:map.entrySet())
{
System.out.println(m.getKey()+" "+m.getValue());
}
}
}
输出:
Before invoking remove() method
100 Amit
101 Vijay
102 Ravi
103 Rahul
After invoking remove() method
100 Amit
101 Vijay
103 Rahul
Java TreeMap示例:NavigableMap
import java.util.*;
class TreeMap3{
public static void main(String args[]){
NavigableMap<
Integer, String>
map=new TreeMap<
Integer, String>
();
map.put(100, "Amit");
map.put(102, "Ravi");
map.put(101, "Vijay");
map.put(103, "Rahul");
//Maintains descending order
System.out.println("descendingMap: "+map.descendingMap());
//Returns key-value pairs whose keys are less than or equal to the specified key.
System.out.println("headMap: "+map.headMap(102, true));
//Returns key-value pairs whose keys are greater than or equal to the specified key.
System.out.println("tailMap: "+map.tailMap(102, true));
//Returns key-value pairs exists in between the specified key.
System.out.println("subMap: "+map.subMap(100, false, 102, true));
}
}
descendingMap: {103=Rahul, 102=Ravi, 101=Vijay, 100=Amit}
headMap: {100=Amit, 101=Vijay, 102=Ravi}
tailMap: {102=Ravi, 103=Rahul}
subMap: {101=Vijay, 102=Ravi}
Java TreeMap示例:SortedMap
import java.util.*;
class TreeMap4{
public static void main(String args[]){
SortedMap<
Integer, String>
map=new TreeMap<
Integer, String>
();
map.put(100, "Amit");
map.put(102, "Ravi");
map.put(101, "Vijay");
map.put(103, "Rahul");
//Returns key-value pairs whose keys are less than the specified key.
System.out.println("headMap: "+map.headMap(102));
//Returns key-value pairs whose keys are greater than or equal to the specified key.
System.out.println("tailMap: "+map.tailMap(102));
//Returns key-value pairs exists in between the specified key.
System.out.println("subMap: "+map.subMap(100, 102));
}
}
headMap: {100=Amit, 101=Vijay}
tailMap: {102=Ravi, 103=Rahul}
subMap: {100=Amit, 101=Vijay}
HashMap和TreeMap有什么区别?
哈希图 | 树状图 |
---|---|
1)HashMap可以包含一个空键。 | TreeMap不能包含任何空键。 |
2)HashMap不维护任何顺序。 | TreeMap保持升序。 |
import java.util.*;
class Book {
int id;
String name, author, publisher;
int quantity;
public Book(int id, String name, String author, String publisher, int quantity) {
this.id = id;
this.name = name;
this.author = author;
this.publisher = publisher;
this.quantity = quantity;
}
}
public class MapExample {
public static void main(String[] args) {
//Creating map of Books
Map<
Integer, Book>
map=new TreeMap<
Integer, Book>
();
//Creating Books
Book b1=new Book(101, "Let us C", "Yashwant Kanetkar", "BPB", 8);
Book b2=new Book(102, "Data Communications &
Networking", "Forouzan", "Mc Graw Hill", 4);
Book b3=new Book(103, "Operating System", "Galvin", "Wiley", 6);
//Adding Books to map
map.put(2, b2);
map.put(1, b1);
map.put(3, b3);
//Traversing map
for(Map.Entry<
Integer, Book>
entry:map.entrySet()){
int key=entry.getKey();
Book b=entry.getValue();
System.out.println(key+" Details:");
System.out.println(b.id+" "+b.name+" "+b.author+" "+b.publisher+" "+b.quantity);
}
}
}
输出:
1 Details:
101 Let us C Yashwant Kanetkar BPB 8
2 Details:
102 Data Communications &
Networking Forouzan Mc Graw Hill 4
3 Details:
103 Operating System Galvin Wiley 6
推荐阅读
- Java TreeSet类
- Java队列接口
- Java Map接口
- Java列表接口
- Java LinkedList类
- 电脑上的OpenAL是什么(卸载OpenAL是否安全?提示和指南)
- Windows 10中的Chrome书签存储在哪里(详细指南)
- 跟踪IP地址的14款最佳IP地址跟踪器软件推荐合集
- 14款最佳免费Windows 10产品密钥查找软件推荐合集