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的主要區別:

比較依據HashMapTreeMap
基礎
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執行速度更快,因為它是非同步的。

更新於:2022年7月29日

2K+瀏覽量

啟動你的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.