Java 教程

Java 控制语句

面向对象编程

Java 内置类

Java 文件处理

Java 错误和异常

Java 多线程

Java 同步

Java 网络

Java 集合

Java 接口

Java 数据结构

Java 集合算法

高级 Java

Java 杂项

Java API 和框架

Java 类参考

Java 有用资源

Java - SortedMap 接口



SortedMap 接口扩展了 Map。它确保条目按升序键顺序维护。

当调用映射中没有项目时,一些方法会抛出 NoSuchElementException。当 对象 与映射中的元素不兼容时,会抛出 ClassCastException。如果尝试在映射中不允许为 null 的情况下使用 null 对象,则会抛出 NullPointerException。

SortedMap 接口方法

下表总结了 SortedMap 声明的方法:

序号 方法和描述
1

Comparator comparator( )

返回调用排序映射的比较器。如果对调用映射使用自然排序,则返回 null。

2

Object firstKey( )

返回调用映射中的第一个键。

3

SortedMap headMap(Object end)

返回一个排序映射,用于键小于 end 的映射条目。

4

Object lastKey( )

返回调用映射中的最后一个键。

5

SortedMap subMap(Object start, Object end)

返回一个映射,其中包含键大于或等于 start 且小于 end 的条目。

6

SortedMap tailMap(Object start)

返回一个映射,其中包含键大于或等于 start 的条目。

SortedMap 接口的层次结构

下图显示了 Java 中 SortedMap 接口的层次结构:

Hierarchy Diagram of SortedMap Interface

SortedMap 接口上的操作

创建 SortedMap

TreeMap 类 实现 SortedMap 接口。我们可以使用 TreeMap 构造函数来创建一个 SortedMap 实例。

语法

以下是创建排序映射实例的语法

// Create a sorted map
SortedMap<String, Double> map = new TreeMap<>();

这里我们创建了一个 String 与 Double 值的排序映射。此映射将根据字母数字顺序存储键。

向 SortedMap 添加值

SortedMap 提供了 put() 方法,可用于向排序映射实例添加值。每当向映射中添加值时,映射都会根据输入的键自动排序自身。

语法

public V put(K key,V value)

其中键值对表示彼此关联的键和值,并存储在映射中。如果此键已与某个值关联,则返回该值,并将新值与该键关联,否则返回 null 值。

示例

// Put elements to the map
map.put("Zara", Double.valueOf(3434.34));
map.put("Mahnaz", Double.valueOf(123.22));
map.put("Ayan", Double.valueOf(1378.00));
map.put("Daisy", Double.valueOf(99.22));
map.put("Qadir", Double.valueOf(-19.08));

从 SortedMap 获取值

使用 get(key) 方法,我们可以检索与键关联的值。

语法

public V get(Object key)

如果映射中不存在该键,则返回 null,否则返回与提供的键关联的值。

示例

Double value = map.get("Qadir");
System.out.print("Qadir: " + value);

更新 SortedMap 的值

我们可以通过再次使用相同的键调用 put() 方法来更新已排序映射的现有值。作为已排序映射,条目将根据新输入键的排序顺序再次排序。

示例

// Put elements to the map
map.put("Zara", Double.valueOf(3434.34));
map.put("Mahnaz", Double.valueOf(123.22));
map.put("Zara", Double.valueOf(1378.00));

SortedMap 将考虑最新的 put() 方法调用来更新具有相同键的条目。

从已排序映射中删除值

使用 remove(key) 方法,我们可以删除与键关联的键值。

语法

public V remove(Object key)

如果映射中不存在键,则它将返回 null,否则它将从映射中删除键值关联并相应地对映射进行排序。

示例

Double value = map.remove("Qadir");
System.out.print("Qadir removed with value: " + value);

迭代 SortedMap

SortedMap 条目可以轻松导航。SortedMap 提供了一个方法 entrySet(),它以集合的形式提供所有条目。

语法

public Set<Map.Entry<K,V>> entrySet()

其中 Map.Entry 包含要迭代的键值对。

示例

// Get a set of the entries
Set<Map.Entry<String, Double>> set = map.entrySet();

// Get an iterator
Iterator<Map.Entry<String, Double>> i = set.iterator();

// Display elements 
while(i.hasNext()) {
 Map.Entry<String, Double> me = i.next();
 System.out.println(me.getKey());
}

SortedMap 接口的示例

示例 1

以下是一个示例,展示了如何使用 TreeMap 获取 SortedMap 的值:

import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.SortedMap;
import java.util.TreeMap;

public class MapDemo {

   public static void main(String args[]) {
      // Create a hash map
      SortedMap<String, Double> map = new TreeMap<>();

      // Put elements to the map
      map.put("Zara", Double.valueOf(3434.34));
      map.put("Mahnaz", Double.valueOf(123.22));
      map.put("Ayan", Double.valueOf(1378.00));
      map.put("Daisy", Double.valueOf(99.22));
      map.put("Qadir", Double.valueOf(-19.08));
      
      // Get a set of the entries
      Set<Map.Entry<String, Double>> set = map.entrySet();
      
      // Get an iterator
      Iterator<Map.Entry<String, Double>> i = set.iterator();
     
      // Display elements 
      while(i.hasNext()) {
         Map.Entry<String, Double> me = i.next();
         System.out.print(me.getKey() + ": ");
         System.out.println(me.getValue());
      }
   }
}

输出

Ayan: 1378.0
Daisy: 99.22
Mahnaz: 123.22
Qadir: -19.08
Zara: 3434.34

示例 2

以下是一个示例,展示了如何使用 TreeMap 设置 SortedMap 的值:

import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.SortedMap;
import java.util.TreeMap;

public class MapDemo {

   public static void main(String args[]) {
      // Create a hash map
      SortedMap<String, Double> map = new TreeMap<>();

      // Put elements to the map
      map.put("Zara", Double.valueOf(3434.34));
      map.put("Mahnaz", Double.valueOf(123.22));
      map.put("Ayan", Double.valueOf(1378.00));
      map.put("Daisy", Double.valueOf(99.22));
      map.put("Qadir", Double.valueOf(-19.08));
      
      // Get a set of the entries
      Set<Map.Entry<String, Double>> set = map.entrySet();
      
      // Get an iterator
      Iterator<Map.Entry<String, Double>> i = set.iterator();
     
      // Display elements 
      while(i.hasNext()) {
         Map.Entry<String, Double> me = i.next();
         me.setValue(me.getValue() * 10);
         System.out.print(me.getKey() + ": ");
         System.out.println(me.getValue());
      }
   }
}

输出

Ayan: 13780.0
Daisy: 992.2
Mahnaz: 1232.2
Qadir: -190.79999999999998
Zara: 34343.4

示例 3

以下是一个示例,展示了如何使用 TreeMap 获取 SortedMap 条目的键:

import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.SortedMap;
import java.util.TreeMap;

public class MapDemo {

   public static void main(String args[]) {
      // Create a hash map
      SortedMap<String, Double> map = new TreeMap<>();

      // Put elements to the map
      map.put("Zara", Double.valueOf(3434.34));
      map.put("Mahnaz", Double.valueOf(123.22));
      map.put("Ayan", Double.valueOf(1378.00));
      map.put("Daisy", Double.valueOf(99.22));
      map.put("Qadir", Double.valueOf(-19.08));
      
      // Get a set of the entries
      Set<Map.Entry<String, Double>> set = map.entrySet();
      
      // Get an iterator
      Iterator<Map.Entry<String, Double>> i = set.iterator();
     
      // Display elements 
      while(i.hasNext()) {
         Map.Entry<String, Double> me = i.next();
         System.out.println(me.getKey());
      }
   }
}

输出

Ayan
Daisy
Mahnaz
Qadir
Zara

SortedMap 接口的优点

  • SortedMap 确保映射始终按键的升序排序。每当将键值对添加到 SortedMap 时,它都会重新排序。
  • 由于已排序,因此 SortedMap 在搜索方面非常高效。对于大型只读数据集,SortedMap 是实现的理想选择。
  • 我们可以通过在键类型上使用比较器来自定义排序机制。

SortedMap 接口的缺点

  • 由于 SortedMap 必须在每次添加或更改条目时都进行排序,因此在更改非常频繁的情况下,它会成为性能瓶颈。在这种情况下,不建议使用 SortedMap。
  • 由于 SortedMap 基于键维护排序能力,因此键必须是可比较的,因此如果自定义键未实现 Comparable 接口,则我们无法使用它。
java_collections.htm
广告