📜  Java TreeMap类

📅  最后修改于: 2020-10-12 10:07:57             🧑  作者: Mango

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 extends AbstractMap implements NavigableMap, Cloneable, Serializable

TreeMap类参数

让我们看一下java.util.TreeMap类的参数。

  • K :这是此映射维护的键的类型。
  • V :这是映射值的类型。

Java TreeMap类的构造方法

Constructor Description
TreeMap() It is used to construct an empty tree map that will be sorted using the natural order of its key.
TreeMap(Comparator comparator) It is used to construct an empty tree-based map that will be sorted using the comparator comp.
TreeMap(Map m) It is used to initialize a treemap with the entries from m, which will be sorted using the natural order of the keys.
TreeMap(SortedMap m) It is used to initialize a treemap with the entries from the SortedMap sm, which will be sorted in the same order as sm.

Java TreeMap类的方法

Method Description
Map.Entry ceilingEntry(K key) It returns the key-value pair having the least key, greater than or equal to the specified key, or null if there is no such key.
K ceilingKey(K key) It returns the least key, greater than the specified key or null if there is no such key.
void clear() It removes all the key-value pairs from a map.
Object clone() It returns a shallow copy of TreeMap instance.
Comparator comparator() It returns the comparator that arranges the key in order, or null if the map uses the natural ordering.
NavigableSet descendingKeySet() It returns a reverse order NavigableSet view of the keys contained in the map.
NavigableMap descendingMap() It returns the specified key-value pairs in descending order.
Map.Entry firstEntry() It returns the key-value pair having the least key.
Map.Entry floorEntry(K key) It returns the greatest key, less than or equal to the specified key, or null if there is no such key.
void forEach(BiConsumer action) It performs the given action for each entry in the map until all entries have been processed or the action throws an exception.
SortedMap headMap(K toKey) It returns the key-value pairs whose keys are strictly less than toKey.
NavigableMap headMap(K toKey, boolean inclusive) It returns the key-value pairs whose keys are less than (or equal to if inclusive is true) toKey.
Map.Entry higherEntry(K key) It returns the least key strictly greater than the given key, or null if there is no such key.
K higherKey(K key) It is used to return true if this map contains a mapping for the specified key.
Set keySet() It returns the collection of keys exist in the map.
Map.Entry lastEntry() It returns the key-value pair having the greatest key, or null if there is no such key.
Map.Entry lowerEntry(K key) It returns a key-value mapping associated with the greatest key strictly less than the given key, or null if there is no such key.
K lowerKey(K key) It returns the greatest key strictly less than the given key, or null if there is no such key.
NavigableSet navigableKeySet() It returns a NavigableSet view of the keys contained in this map.
Map.Entry pollFirstEntry() It removes and returns a key-value mapping associated with the least key in this map, or null if the map is empty.
Map.Entry pollLastEntry() It removes and returns a key-value mapping associated with the greatest key in this map, or null if the map is empty.
V put(K key, V value) It inserts the specified value with the specified key in the map.
void putAll(Map map) It is used to copy all the key-value pair from one map to another map.
V replace(K key, V value) It replaces the specified value for a specified key.
boolean replace(K key, V oldValue, V newValue) It replaces the old value with the new value for a specified key.
void replaceAll(BiFunction function) It replaces each entry’s value with the result of invoking the given function on that entry until all entries have been processed or the function throws an exception.
NavigableMap subMap(K fromKey, boolean fromInclusive, K toKey, boolean toInclusive) It returns key-value pairs whose keys range from fromKey to toKey.
SortedMap subMap(K fromKey, K toKey) It returns key-value pairs whose keys range from fromKey, inclusive, to toKey, exclusive.
SortedMap tailMap(K fromKey) It returns key-value pairs whose keys are greater than or equal to fromKey.
NavigableMap tailMap(K fromKey, boolean inclusive) It returns key-value pairs whose keys are greater than (or equal to, if inclusive is true) fromKey.
boolean containsKey(Object key) It returns true if the map contains a mapping for the specified key.
boolean containsValue(Object value) It returns true if the map maps one or more keys to the specified value.
K firstKey() It is used to return the first (lowest) key currently in this sorted map.
V get(Object key) It is used to return the value to which the map maps the specified key.
K lastKey() It is used to return the last (highest) key currently in the sorted map.
V remove(Object key) It removes the key-value pair of the specified key from the map.
Set> entrySet() It returns a set view of the mappings contained in the map.
int size() It returns the number of key-value pairs exists in the hashtable.
Collection values() It returns a collection view of the values contained in the map.

Java TreeMap示例

import java.util.*;
class TreeMap1{
 public static void main(String args[]){
   TreeMap map=new TreeMap();  
  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 map=new TreeMap();  
  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 map=new TreeMap();  
  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 map=new TreeMap();  
  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有什么区别?

HashMap TreeMap
1) HashMap can contain one null key. TreeMap cannot contain any null key.
2) HashMap maintains no order. TreeMap maintains ascending order.

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 map=new TreeMap();  
    //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 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