个性化阅读
专注于IT技术分析

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
赞(0)
未经允许不得转载:srcmini » Java TreeMap类

评论 抢沙发

评论前必须登录!