Java TreeMap类

Java TreeMap类

文章图片
【Java TreeMap类】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 keySet() 它返回映射中存在的键的集合。
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 values() 它返回映射中包含的值的集合视图。
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

    推荐阅读