Java TreeMap类是基于红黑树的实现。它提供了一种按排序顺序存储键值对的有效方法。
关于Java TreeMap类的要点是:
- Java TreeMap包含基于键的值。它实现了NavigableMap接口并扩展了AbstractMap类。
- Java TreeMap仅包含唯一元素。
- Java TreeMap不能具有null键, 但是可以具有多个null值。
- Java TreeMap不同步。
- Java TreeMap保持升序。
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:这是映射值的类型。
Java TreeMap类的构造方法
建设者 | 描述 |
---|---|
TreeMap() | 它用于构造一个空的树图, 该树图将使用其键的自然顺序进行排序。 |
TreeMap(Comparator <?super K>比较器) | 它用于构造一个空的基于树的映射, 该映射将使用比较器comp进行排序。 |
TreeMap(Map <?扩展K , ?扩展V> m) | 它用于使用m中的条目初始化树图, 该树图将使用键的自然顺序进行排序。 |
TreeMap(SortedMap <K , ?扩展V> m) | 它用于使用SortedMap sm中的条目初始化树图, 这些条目将以与sm相同的顺序排序。 |
Java TreeMap类的方法
方法 | 描述 |
---|---|
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
|
它返回映射中包含的值的集合视图。 |
Java TreeMap示例
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保持升序。 |
Java 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
评论前必须登录!
注册