Java中HashMap和TreeMap的區別
HashMap和TreeMap都被認為是Map類,因為它們都實現了Map介面的職責。Map是一個儲存鍵值對的物件,其中每個鍵只有一個例項,但值可以有多個例項。HashMap類使用雜湊表作為資料結構。TreeMap使用紅黑樹作為資料儲存。
什麼是HashMap?
HashMap使用稱為雜湊表的資料結構來儲存對映的鍵值對。插入鍵值對時使用鍵的雜湊碼。因此,對映中的每個鍵都必須是唯一的,以便可以檢索其值。
由於HashMap不保留插入順序,因此HashMap物件不會按新增到對映中的順序返回元素。另一方面,元素返回的順序在任何時候都不能保證一致。
鍵只能為null一次,而值可以有多個null值。HashMap可以儲存不同型別的物件作為鍵和值。
如何建立HashMap?
您可以使用以下四種方法之一構造HashMap:
HashMap() HashMap(Map m) HashMap(int capacity), HashMap(int capacity, float fillRatio)
HashMap的第一個建構函式建立一個預設為空的物件。
第二個建構函式使用Map“m”的元素初始化HashMap。
第三個建構函式在初始化時將HashMap的容量設定為引數中指定的值。
第四個建構函式將HashMap物件的容量和填充率都設定為其預設值。
HashMap的預設大小為16,預設填充率為0.75。如有必要,這兩個值都可以更改。
例如:
import java.util.HashMap;
public class HashMapSample {
public static void main(String[] args) {
HashMap map = new HashMap();
map.put("Today is","Monday");
map.put("Tomorrow is","Tuesday");
System.out.println(map);
}
}它將產生以下輸出:
Today is = Monday Tomorrow is =Tuesday
什麼是TreeMap?
TreeMap是另一種Map類,就像HashMap一樣。TreeMap類擴充套件了AbstractMap類並實現了NavigabelMap和SortedMap介面。
對映的元素以樹狀結構儲存在TreeMap物件中。紅黑樹是用於儲存對映的資料結構。
鍵值對按排序順序儲存在TreeMap中,這使得可以更快地檢索元素。TreeMap物件按排序順序(升序)返回元素。
如何構造TreeMap?
有四種不同的方法可以構造TreeMap:
TreeMap( ) TreeMap(Comparator<? super K> comp) TreeMap(Map<? extends K, ? extends V> m) TreeMap(SortedMap<K, ? extends V> sm)
第一個建構函式將建立一個空的TreeMap物件,並以最有效的方式對它的鍵進行排序。
第二個建構函式將建立一個空的TreeMap,使用“comp”比較器進行比較和排序。
上面描述的第三個建構函式將建立一個TreeMap,然後使用Map“m”中的條目對其進行初始化。
第四個建構函式將建立一個TreeMap,並使用作為引數傳入的SortedMap物件的條目對其進行初始化。
TreeMap本身不包含任何額外的方法;它依賴於NavigableMap和SortedMap介面以及AbstractMap類提供的方法。
例如:
import java.util.TreeMap;
public class TreeMapSample {
public static void main(String[] args) {
TreeMap<String,String> map= new TreeMap<String,String>();
map.put("Today is", "Monday");
map.put("Tomorrow is", "Tuesday");
System.out.println(map);
}
}HashMap和TreeMap的區別
下表重點介紹了HashMap和TreeMap的主要區別:
| 比較依據 | HashMap | TreeMap |
|---|---|---|
| 基礎 | HashMap不保留插入順序。 | TreeMap保留插入順序。 |
| 實現介面 | HashMap實現了Map、Cloneable和Serializable介面。 | TreeMap實現了NavigableMap介面,並且可以克隆和序列化。 |
| 資料結構 | HashMap的基礎資料結構是雜湊表。 | TreeMap的基礎資料結構是紅黑樹。 |
| 空鍵和空值 | HashMap中空鍵可以只用一次,空值可以使用任意多次。 | TreeMap不允許使用空鍵,但允許使用任意多次空值。 |
| 繼承和實現 | HashMap類擴充套件了AbstractMap類並實現了Map介面。 | TreeMap類擴充套件了AbstractMap類並分別實現了SortedMap和NavigableMap介面。 |
| 效能 | HashMap操作速度更快。 | 與HashMap相比,TreeMap的操作速度較慢。 |
| 元素順序 | HashMap不保留順序。 | 元素按自然順序(升序)排列。 |
| 同構/異構 | HashMap支援異構元素,因為它不執行鍵排序。 | 由於排序,TreeMap允許同構值作為鍵。 |
| 用途 | 當我們不需要鍵值對按排序順序排列時,應該使用HashMap資料結構。 | 當我們需要鍵值對按排序(升序)順序排列時,應該使用TreeMap。 |
結論
只有在需要鍵值對的排序列表時才應該使用TreeMap。排序會帶來效能損失。HashMap執行速度更快,因為它是非同步的。
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP