Java 简明教程

Java - SortedMap Interface

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

The SortedMap interface extends Map. It ensures that the entries are maintained in an ascending key order.

调用地图中没有项时,几个方法会引发 NoSuchElementException。当 object 与地图中的元素不兼容时,引发 ClassCastException。当尝试使用空对象而地图中不允许出现空值时,引发 NullPointerException。

Several methods throw a NoSuchElementException when no items are in the invoking map. A ClassCastException is thrown when an object is incompatible with the elements in a map. A NullPointerException is thrown if an attempt is made to use a null object when null is not allowed in the map.

SortedMap Interface Methods

SortedMap 声明的方法汇总在以下表格中 −

The methods declared by SortedMap are summarized in the following table −

Sr.No.

Method & Description

1

Comparator comparator( ) Returns the invoking sorted map’s comparator. If the natural ordering is used for the invoking map, null is returned.

2

Object firstKey( ) Returns the first key in the invoking map.

3

SortedMap headMap(Object end) Returns a sorted map for those map entries with keys that are less than end.

4

Object lastKey( ) Returns the last key in the invoking map.

5

SortedMap subMap(Object start, Object end) Returns a map containing those entries with keys that are greater than or equal to start and less than end.

6

SortedMap tailMap(Object start) Returns a map containing those entries with keys that are greater than or equal to start.

Hierarchy of SortedMap Interface

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

The following diagram shows the hierarchy of SortedMap Interface in Java -

hierarchy diagram of sortedmap interface

Operations on SortedMap Interface

Creating a SortedMap

TreeMap class实现了 SortedMap 接口。我们可以使用 TreeMap 构造函数创建 SortedMap 实例。

TreeMap class implements the SortedMap interface. We can use the TreeMap constructor to create a SortedMap instance.

以下是创建 sortemap 实例的语法:

Following is the syntax to create a sortemap instance:

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

在此,我们正在创建 String 与 Double 值的排序映射。此映射将根据字母数字顺序存储键。

Here we’re creating a sorted map of String vs Double values. This map will store the keys based on alphanumeric order.

Adding Value to a SortedMap

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

SortedMap provides the put() method, which can be used to add value to a sortedmap instance. Whenever a value is added to the map, the map automatically sorts itself based on the keys entered.

public V put(K key,V value)

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

Where the Key-Value pair represents the key and value associated with each other and are stored in the map. If this key is already associated with a value then that value is returned and the new value is associated with the key otherwise a null value is returned.

// 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));

Getting value from a SortedMap

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

Using the get(key) method, we can retrieve the value associated with a key.

public V get(Object key)

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

If the key is not present in the map, then it will return null otherwise it will return the associated value with the key provided.

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

Updating value of a SortedMap

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

We can update an existing value of a sortedmap by calling the put() method again with the same key. Being a sortedmap, the entries will be sorted again based on the sorting order of the newly entered key(s).

// 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() 方法调用,以用具有相同键的条目更新条目。

SortedMap will consider the latest put() method call to update the entry with same key.

Deleting a value from a sortedmap

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

Using remove(key) method, we can remove the key, value associated with a key.

public V remove(Object key)

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

If key is not present in the map, then it will return null otherwise it will remove key-value association from the map and sort the map accordingly.

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

Iterating sortedMap

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

SortedMap entries can be easily navigated. SortedMap provided a method entrySet() which provides all the entries in form of set.

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

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

Where Map.Entry contains the key-value pair to be iterated.

// 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());
}

Examples of SortedMap Interface

Example 1

以下是一个显示 TreeMap 如何用于获取 SortedMap 值的示例 -

Following is an example showing how TreeMap can be used to get values of a 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

Example 2

以下是一个显示 TreeMap 如何用于设置 SortedMap 值的示例 -

Following is an example showing how TreeMap can be used to set values of a 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

Example 3

以下是一个显示 TreeMap 如何用于获取分类映射项的键的示例 -

Following is an example showing how a TreeMap can be used to get key of a sortedMap entry −

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

Advantages of SortedMap Interface

  1. SortedMap ensures that the map is always sorted in ascending order of the keys. Whenever a key-value pair is added to the sortedmap, it is re-sorted

  2. Being sorted, sortedmap is very efficient in searches. In the case of large read-only datasets, sortedmap is an ideal choice to be implemented.

  3. We can customize the sorting mechanism by using a comparator on the key type.

Disadvantages of SortedMap Interface

  1. As a sortedmap has to be sorted every time an entry is added or changed, it becomes a performance bottleneck where changes are very frequent. In such cases, sortedmap is not preferred.

  2. As sortedMap maintains sort ability based on key, a key should be comparable and thus we cannot use a custom key if it is not implementing the comparable interface.