SortedMap 是 collection framework 中的接口。該接口擴展了Map interface並提供其元素的總排序(可以按鍵的排序順序遍曆元素)。實現該接口的類是TreeMap。
SortedMap 接口是 Java 中 java.util.Map 接口的子接口。它擴展了 Map 接口,以根據其鍵的自然順序提供其元素的總排序。
SortedMap 和常規 Map 之間的主要區別在於 SortedMap 中的元素按排序順序存儲,而在 Map 中元素按任意順序存儲。排序順序由鍵的自然順序決定,鍵必須實現 java.lang.Comparable 接口,或者由傳遞給 SortedMap 構造函數的 Comparator 決定。
以下是如何使用 SortedMap 接口的示例:
Java
import java.util.SortedMap;
import java.util.TreeMap;
public class Main {
public static void main(String[] args) {
SortedMap<String, Integer> sortedMap = new TreeMap<>();
// Adding elements to the sorted map
sortedMap.put("A", 1);
sortedMap.put("C", 3);
sortedMap.put("B", 2);
// Getting values from the sorted map
int valueA = sortedMap.get("A");
System.out.println("Value of A: " + valueA);
// Removing elements from the sorted map
sortedMap.remove("B");
// Iterating over the elements of the sorted map
for (String key : sortedMap.keySet()) {
System.out.println("Key: " + key + ", Value: " + sortedMap.get(key));
}
}
}
Value of A: 1 Key: A, Value: 1 Key: C, Value: 3
SortedMap 的主要特征是它按自然順序或指定的比較器對鍵進行排序。因此,當您想要滿足以下條件的Map時,請考慮使用TreeMap:
- 不允許使用 null 鍵或 null 值。
- 鍵按自然順序或指定比較器排序。
類型參數:
- K - 該映射維護的鍵的類型
- V - 映射值的類型
SortedMap的父接口是Map<K, V>.
SortedMap的子接口是ConcurrentNavigableMap
SortedMap由ConcurrentSkipListMap實現,TreeMap.
聲明:
public interface SortedMap<K, V> extends Map<K, V> { Comparator comparator(); SortedMap subMap(K fromKey, K toKey); SortedMap headMap(K toKey); SortedMap tailMap(K fromKey); K firstKey(); K lastKey(); }
例子:
Java
// Java code to demonstrate SortedMap Interface
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.SortedMap;
import java.util.TreeMap;
public class SortedMapExample {
public static void main(String[] args)
{
SortedMap<Integer, String> sm
= new TreeMap<Integer, String>();
sm.put(new Integer(2), "practice");
sm.put(new Integer(3), "quiz");
sm.put(new Integer(5), "code");
sm.put(new Integer(4), "contribute");
sm.put(new Integer(1), "geeksforgeeks");
Set s = sm.entrySet();
// Using iterator in SortedMap
Iterator i = s.iterator();
// Traversing map. Note that the traversal
// produced sorted (by keys) output .
while (i.hasNext()) {
Map.Entry m = (Map.Entry)i.next();
int key = (Integer)m.getKey();
String value = (String)m.getValue();
System.out.println("Key : " + key
+ " value : " + value);
}
}
}
Key : 1 value : geeksforgeeks Key : 2 value : practice Key : 3 value : quiz Key : 4 value : contribute Key : 5 value : code
創建SortedMap對象
由於 SortedMap 是 interface ,因此無法創建 SortedMap 類型的對象。我們總是需要一個擴展這個列表的類來創建一個對象。而且,在 Java 1.5 中引入泛型之後,可以限製可以存儲在 SortedMap 中的對象的類型。這個類型安全的映射可以定義為:
// Obj1, Obj2 are the type of the object to be stored in SortedMap
SortedMap<Obj1, Obj2> set = new TreeMap<Obj1, Obj2> ();
對SortedMap執行各種操作
由於SortedMap 是一個接口,因此它隻能與實現該接口的類一起使用。 TreeMap 是實現SortedMap 接口的類。現在,讓我們看看如何在 TreeMap 上執行一些常用的操作。
1. 添加元素:為了向 SortedMap 添加元素,我們可以使用TreeMap put()方法。但是,插入順序不會保留在 TreeMap 中。在內部,對於每個元素,都會對鍵進行比較並按升序排序。
Java
// Java program add the elements in the SortedMap
import java.io.*;
import java.util.*;
class GFG {
// Main Method
public static void main(String args[])
{
// Default Initialization of a
// SortedMap
SortedMap tm1 = new TreeMap();
// Initialization of a SortedMap
// using Generics
SortedMap<Integer, String> tm2
= new TreeMap<Integer, String>();
// Inserting the Elements
tm1.put(3, "Geeks");
tm1.put(2, "For");
tm1.put(1, "Geeks");
tm2.put(new Integer(3), "Geeks");
tm2.put(new Integer(2), "For");
tm2.put(new Integer(1), "Geeks");
System.out.println(tm1);
System.out.println(tm2);
}
}
{1=Geeks, 2=For, 3=Geeks} {1=Geeks, 2=For, 3=Geeks}
2. 改變元素:添加元素後,如果我們想更改元素,可以通過再次添加元素來完成TreeMap put()方法。由於 SortedMap 中的元素是使用鍵進行索引的,因此隻需插入我們希望更改的鍵的更新值即可更改鍵的值。
Java
// Java program to change
// the elements in SortedMap
import java.io.*;
import java.util.*;
class GFG {
// Main Method
public static void main(String args[])
{
// Initialization of a SortedMap
// using Generics
SortedMap<Integer, String> tm
= new TreeMap<Integer, String>();
// Inserting the Elements
tm.put(3, "Geeks");
tm.put(2, "Geeks");
tm.put(1, "Geeks");
System.out.println(tm);
tm.put(2, "For");
System.out.println(tm);
}
}
{1=Geeks, 2=Geeks, 3=Geeks} {1=Geeks, 2=For, 3=Geeks}
3. 移除元件:為了從 SortedMap 中刪除元素,我們可以使用TreeMap remove()方法。此方法獲取鍵值,並從 SortedMap 中刪除鍵的映射(如果映射中存在該鍵的映射)。
Java
// Java program to remove the
// elements from SortedMap
import java.io.*;
import java.util.*;
class GFG {
// Main Method
public static void main(String args[])
{
// Initialization of a SortedMap
// using Generics
SortedMap<Integer, String> tm
= new TreeMap<Integer, String>();
// Inserting the Elements
tm.put(3, "Geeks");
tm.put(2, "Geeks");
tm.put(1, "Geeks");
tm.put(4, "For");
System.out.println(tm);
tm.remove(4);
System.out.println(tm);
}
}
{1=Geeks, 2=Geeks, 3=Geeks, 4=For} {1=Geeks, 2=Geeks, 3=Geeks}
4. 迭代SortedMap:有多種方法可以迭代 Map。最著名的方法是使用增強的for循環並拿到鑰匙。使用getValue()方法找到鍵的值。
Java
// Java program to iterate through SortedMap
import java.util.*;
class GFG {
// Main Method
public static void main(String args[])
{
// Initialization of a SortedMap
// using Generics
SortedMap<Integer, String> tm
= new TreeMap<Integer, String>();
// Inserting the Elements
tm.put(3, "Geeks");
tm.put(2, "For");
tm.put(1, "Geeks");
for (Map.Entry mapElement : tm.entrySet()) {
int key = (int)mapElement.getKey();
// Finding the value
String value = (String)mapElement.getValue();
System.out.println(key + " : " + value);
}
}
}
1 : Geeks 2 : For 3 : Geeks
實現SortedMap接口的類是TreeMap。
在集合框架中實現的TreeMap 類是SortedMap 接口和SortedMap 擴展Map 接口的實現。它的行為就像一個簡單的映射,不同之處在於它以排序的格式存儲鍵。 TreeMap采用樹形數據結構進行存儲。對象按升序存儲。但我們也可以通過傳遞比較器來按降序存儲。讓我們看看如何使用此類創建SortedMap 對象。
Java
// Java program to demonstrate the
// creation of SortedMap object using
// the TreeMap class
import java.util.*;
class GFG {
public static void main(String[] args)
{
SortedMap<String, String> tm
= new TreeMap<String, String>(new Comparator<String>() {
public int compare(String a, String b)
{
return b.compareTo(a);
}
});
// Adding elements into the TreeMap
// using put()
tm.put("India", "1");
tm.put("Australia", "2");
tm.put("South Africa", "3");
// Displaying the TreeMap
System.out.println(tm);
// Removing items from TreeMap
// using remove()
tm.remove("Australia");
System.out.println("Map after removing "
+ "Australia:" + tm);
}
}
{South Africa=3, India=1, Australia=2} Map after removing Australia:{South Africa=3, India=1}
SortedMap接口的方法
METHOD | DESCRIPTION |
---|---|
SortedMap comparator() | 返回用於對該映射中的鍵進行排序的比較器,如果該映射使用其鍵的自然順序,則返回 null。 |
SortedMap entrySet() | 返回此映射中包含的映射的集合視圖。 |
SortedMap firstKey() | 返回當前此映射中的第一個(最低)鍵。 |
SortedMap headMap() | 返回此映射的部分視圖,其鍵嚴格小於 toKey。 |
SortedMap keySet() | 返回此映射中包含的鍵的集合視圖。 |
SortedMap lastKey() | 返回當前此映射中的最後一個(最高)鍵。 |
SortedMap subMap() | 返回此映射的部分視圖,其鍵範圍從 fromKey(包含)到 toKey(不包含)。 |
SortedMap tailMap() | 返回此映射中鍵大於或等於 fromKey 的部分的視圖。 |
SortedMap values() | 返回此映射中包含的值的集合視圖。 |
從接口 java.util.Map 繼承的方法
METHOD | DESCRIPTION |
---|---|
Map clear() | 此方法用於清除和刪除指定 Map 集合中的所有元素或映射。 |
Map containsKey() |
此方法用於檢查特定鍵是否已映射到 Map 中。 它將關鍵元素作為參數,如果該元素已映射到映射中,則返回 True。 |
Map containsValue() |
此方法用於檢查 Map 中是否由單個或多個鍵映射特定值。 它將該值作為參數,如果該值由映射中的任何鍵映射,則返回 True。 |
Map entrySet() | 此方法用於創建Map中包含的相同元素的集合。它本質上返回Map的集合視圖,或者我們可以創建一個新集合並將Map元素存儲到其中。 |
Map equals() | 此方法用於檢查兩個映射之間的相等性。它驗證作為參數傳遞的一個映射的元素是否等於該映射的元素。 |
Map get() | 此方法用於檢索或獲取參數中提到的特定鍵映射的值。當映射不包含鍵的此類映射時,它返回 NULL。 |
Map hashCode() | 此方法用於為包含鍵和值的給定映射生成 hashCode。 |
Map isEmpty() | 此方法用於檢查映射是否有任何鍵和值對的條目。如果不存在映射,則返回 true。 |
Map keySet() | 此方法用於返回此映射中包含的鍵的 Set 視圖。該集合由Map支持,因此對Map的更改會反映在集合中,反之亦然。 |
Map put() | 該方法用於將指定的值與該映射中的指定的鍵關聯起來。 |
Map putAll() | 該方法用於將指定映射的所有映射複製到該映射。 |
Map remove() | 此方法用於從該映射中刪除鍵的映射(如果該鍵存在於映射中)。 |
size() | 此方法用於返回映射中可用的鍵/值對的數量。 |
values() | 此方法用於創建Map值的集合。它本質上返回 HashMap 中值的集合視圖。 |
SortedMap的優點:
- 排序順序:SortedMap 接口根據其鍵的自然順序或傳遞給構造函數的自定義比較器提供其元素的排序順序。這在您需要按特定順序檢索元素的情況下非常有用。
- 可預測的迭代順序:由於 SortedMap 中的元素按排序順序存儲,因此您可以預測它們在迭代期間返回的順序,從而更容易編寫以特定順序處理元素的算法。
- 搜索性能:SortedMap 接口提供了 Map 接口的高效實現,允許您在對數時間內檢索元素,這使其在需要快速檢索元素的搜索算法中非常有用。
SortedMap的缺點:
- 插入元素速度慢:將元素插入 SortedMap 可能比將元素插入常規 Map 慢,因為 SortedMap 需要維護其元素的排序順序。
- 鍵限製:SortedMap 中的鍵必須實現 java.lang.Comparable 接口,或者必須提供自定義 Comparator。如果您需要使用未實現此接口的自定義鍵,這可能是一個限製。
相關書籍:
- “Java Collections” 作者:莫裏斯·納夫塔林和菲利普·瓦德勒。本書全麵概述了 Java Collections 框架,包括 SortedMap 接口。
- David Flanagan 的《Java 簡介》。本書提供了 Java 核心函數的快速參考,包括SortedMap 接口。
- Maurice Naftalin 和 Philip Wadler 的“Java 泛型和集合”。本書提供了 Java 中泛型和集合的全麵指南,包括 SortedMap 接口。
相關用法
- Java SortedMap clear()用法及代碼示例
- Java SortedMap comparator()用法及代碼示例
- Java SortedMap conatinsKey()用法及代碼示例
- Java SortedMap conatinsValue()用法及代碼示例
- Java SortedMap entrySet()用法及代碼示例
- Java SortedMap equals()用法及代碼示例
- Java SortedMap firstKey()用法及代碼示例
- Java SortedMap get()用法及代碼示例
- Java SortedMap hashCode()用法及代碼示例
- Java SortedMap headMap()用法及代碼示例
- Java SortedMap isEmpty()用法及代碼示例
- Java SortedMap keySet()用法及代碼示例
- Java SortedMap lastKey()用法及代碼示例
- Java SortedMap put()用法及代碼示例
- Java SortedMap putAll()用法及代碼示例
- Java SortedMap remove()用法及代碼示例
- Java SortedMap size()用法及代碼示例
- Java SortedMap subMap()用法及代碼示例
- Java SortedMap tailMap()用法及代碼示例
- Java SortedMap values()用法及代碼示例
- Java SortedSet add()用法及代碼示例
- Java SortedSet addAll()用法及代碼示例
- Java SortedSet clear()用法及代碼示例
- Java SortedSet contains()用法及代碼示例
- Java SortedSet containsAll()用法及代碼示例
注:本文由純淨天空篩選整理自佚名大神的英文原創作品 SortedMap Interface in Java with Examples。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。