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
廣告