Java 集合框架TreeMap

原文:https://www.studytonight.com/java/treemap-in-collection-framework.php

TreeMap 类是基于红黑树的 Map 接口的实现。它提供了一种以排序顺序存储键值对的有效方法。

它类似于 HashMap 类,只是它是按照键的升序排序的。由于其不同步的性质,它不适合线程安全操作。

它实现了导航映射接口并扩展了抽象映射类。下面给出了这个类的声明。

TreeMap声明

public class TreeMap<K,V>extends AbstractMap<K,V>implements NavigableMap<K,V>, Cloneable, Serializable

要点:

  • 它只包含独特的元素。
  • 它不能有空键,但可以有多个空值。
  • 它是非同步的。
  • 它保持升序。

TreeMap构造器

| 构造器 | 描述 | | 树状目录() | 它使用键的自然顺序创建一个新的空TreeMap。 | | TreeMap(Comparator super K>Comparator) | 它创建了一个新的空TreeMap,根据给定的Comparator排序。 | | TreeMap(映射) extends K,? extends V> | 它会创建一个新的TreeMap,其中包含与给定映射相同的映射。 | | TreeMap(黑白文件夹) | 它创建了一个包含 sortedamp 的新TreeMap。 |

示例:创建TreeMap

让我们举一个例子来理解最初为空的 treeMap 的创建。

  class Demo
{
  public static void main(String args[])
  {
    // Creating TreeMap
    TreeMap<String,Integer> treeMap = new TreeMap<String,Integer>();
    // Displaying TreeMap
    System.out.println(treeMap);
  }
}

{}

TreeMap方法

此表包含可用于操作对象的TreeMap方法。

| 映射。入口上界入口(K 键) | 它返回键最少的键-值对,大于或等于指定的键,如果没有这样的键,则返回 null。 | | 密钥 | 它返回最小的键,大于指定的键,如果没有这样的键,则返回 null。 | | 清空() | 它从映射中移除所有键值对。 | | 对象克隆() | 它返回一个TreeMap实例的浅拷贝。 | | Comparator super K>Comparator() | 它返回按顺序排列键的Comparator,如果映射使用自然顺序,则返回 null。 | | 导航集下降键集() | 它返回映射中包含的键的反向导航集合视图。 | | navigation mapdescending map() | 它以降序返回指定的键值对。 | | 映射。Entry firstEntry() | 它返回键最少的键值对。 | | 映射。入口下界入口(开关键) | 它返回最大的键,小于或等于指定的键,如果没有这样的键,则返回 null。 | | void forEach(双消费者〔t0〕行动) | 它对映射中的每个条目执行给定的操作,直到所有条目都已处理完毕,或者该操作引发异常。 | | 排序映射头映射(K toKey) | 它返回键严格小于 toKey 的键-值对。 | | 导航映射头映射(K toKey,含布尔) | 它返回键小于(或等于,如果包含为真)toKey 的键-值对。 | | 映射。条目高输入(K 键) | 它返回严格大于给定键的最小键,如果没有这样的键,则返回 null。 | | 高 K 键 | 如果此映射包含指定键的映射,则它用于返回 true。 | | 设置密钥集() | 它返回映射中存在的键的集合。 | | Map.Entry 荷载试验() | 它返回具有最大键的键值对,如果没有这样的键,则返回 null。 | | 映射。入口下入口(开关键) | 它返回与严格小于给定键的最大键相关联的键值映射,如果没有这样的键,则返回 null。 | | 低钥匙 | 它返回严格小于给定密钥的最大密钥,如果没有这样的密钥,则返回 null。 | | 可导航设置可导航键集() | 它返回此映射中包含的键的导航集合视图。 | | 映射。条目轮询第一个条目() | 它移除并返回与此映射中最小键相关联的键值映射,如果映射为空,则返回 null。 | | 映射。条目轮询条目() | 它移除并返回与此映射中最大键相关联的键值映射,如果映射为空,则返回 null。 | | V 放(K 键,V 值) | 它用指定的键在映射中插入指定的值。 | | 虚空普塔尔(映射 extends K,? extends V>映射) | 它用于将所有键值对从一个映射复制到另一个映射。 | | 电压更换(K 键,电压值) | 它替换指定键的指定值。 | | 布尔替换(K 键,旧值,新值) | 它用指定键的新值替换旧值。 | | void replaceAll(双功能 super K,? super V,? extends V>功能) | 它用调用该条目上给定函数的结果替换每个条目的值,直到所有条目都被处理完或者函数抛出异常。 | | 导航子映射子映射(K 从关键,布尔从包含,K 从包含,布尔到包含) | 它返回键值对,键值对的键范围从“从键”到“到键”。 | | SortedMap subMap(K fromKey,K toKey) | 它返回键值对,键值对的键的范围是从 key(包含)到 toKey(不包含)。 | | 排序映射尾映射(K fromKey) | 它返回键大于或等于 fromKey 的键-值对。 | | 导航映射尾映射(K fromKey,含布尔) | 它返回键大于(或等于,如果包含为真)fromKey 的键-值对。 | | 布尔包含键(对象键) | 如果映射包含指定键的映射,则返回 true。 | | 布尔包含值(对象值) | 如果映射将一个或多个键映射到指定值,则返回 true。 | | K firstKey() | 它用于返回当前排序映射中的第一个(最低的)关键字。 | | 获取(对象键) | 它用于返回映射映射到指定键的值。 | | k 负载 Key() | 它用于返回排序映射中当前的最后一个(最高)键。 | | 移除(对象键) | 它从映射中移除指定键的键值对。 | | int 大小() | 它返回TreeMap中存在的键值对的数量。 | | 集合值() | 它返回映射中包含的值的集合视图。 |

示例:向TreeMap添加元素

创建TreeMap后,让我们向其中添加元素。我们使用 put 方法插入元素,该方法需要两个参数:第一个是键,第二个是值。

  class Demo
{
  public static void main(String args[])
  {
    // Creating TreeMap
    TreeMap<String,Integer> treeMap = new TreeMap<String,Integer>();
    // Adding elements
    treeMap.put("a",100);
    treeMap.put("b",200);
    treeMap.put("c",300);
    treeMap.put("d",400);
    // Displaying TreeMap
    System.out.println(treeMap);
  }

{a=100,b=200,c=300,d=400}

获取 LinkedHashMap 中的第一个和最后一个键

我们可以使用 firstEntry()和 lastEntry()方法获取映射的第一个和最后一个元素。它返回一对键和值。

  import java.util.*;

class Demo
{
  public static void main(String args[])
  {
    // Creating TreeMap
    TreeMap<String,Integer> treeMap = new TreeMap<String,Integer>();
    // Adding elements
    treeMap.put("a",100);
    treeMap.put("b",200);
    treeMap.put("c",300);
    treeMap.put("d",400);
    // Displaying TreeMap
    System.out.println(treeMap);
    // First Element
    System.out.println("First Element: "+treeMap.firstEntry());
    // Last Element
    System.out.println("Last Element: "+treeMap.lastEntry());

  }
}

{a=100,b=200,c=300,d=400}第一个元素:a=100 最后一个元素:d=400

示例:查找TreeMap的头图和尾图

我们可以使用头映射()和尾映射()方法来获取TreeMap的头元素和尾元素。这些方法返回包含元素的映射。

  import java.util.*;

class Demo
{
  public static void main(String args[])
  {
    // Creating TreeMap
    TreeMap<String,Integer> treeMap = new TreeMap<String,Integer>();
    // Adding elements
    treeMap.put("a",100);
    treeMap.put("b",200);
    treeMap.put("c",300);
    treeMap.put("d",400);
    // Displaying TreeMap
    System.out.println(treeMap);
    // Head Map
    System.out.println("Head Map: "+treeMap.headMap("c"));
    // Tail Map
    System.out.println("Tail Map: "+treeMap.tailMap("c"));

  }
}

{a=100,b=200,c=300,d=400}头部图:{a=100,b=200}尾部图:{c=300,d=400}

示例:迭代TreeMap

在这个例子中,我们正在创建TreeMap来存储数据。它使用树来存储数据,数据总是按照排序的顺序,并使用循环来迭代映射。见下面的例子。

  import java.util.*;

class Demo
{
  public static void main(String args[])
  {
    TreeMap<String,Integer> tm = new TreeMap<String,Integer>();
    tm.put("a",100);
    tm.put("b",200);
    tm.put("c",300);
    tm.put("d",400);

    Set<Map.Entry<String,Integer>> st = tm.entrySet();
    for(Map.Entry<String,Integer> me:st)
    {
      System.out.print(me.getKey()+":");
      System.out.println(me.getValue());
    }
  }
}

a:100 b:200 c:300 d:400