[英]difference between linkedhashmap, hashmap, map, hashtable
我正准備進行軟件訪談,現在我幾天都遇到了問題。
我無法弄清楚Java Collection API中存在的linkedhashmap,map,hashtable和hashmap之間的區別。
所有這些都具有相同的獲取和復雜性嗎? 我知道map是接口類和hashmap,hashtable,linkedhashmap實現這個接口。 那么這是否意味着這三個類的內部實現是一樣的? 它們是如何在集合api中實現的?
提前致謝!!!
我懷疑這些差異可以比這些類中已經在JavaDocs中編寫的內容更好地解釋:
ConcurrentHashMap
和ConcurrentSkipListMap
。 所有上述Map
實現都具有(攤銷的) O(1)時間復雜度的基本get / put操作。 處理null
值時存在細微差別,因此不可避免地要檢查JavaDoc的詳細信息。
要了解這些類是如何實現的,請查看它們的繼承樹:
Map
(只是界面)
Dictionary
(廢棄的抽象類)
Hashtable
(“舊”地圖實現依賴於它自己) AbstractMap
(“新”地圖實現的基本功能)
HashMap
(第一個用於通用目的的具體地圖實現)
LinkedHashMap
(通過維護鏈表擴展HashMap
) 他們都遵守同樣的合同,但在實施方面存在一些差異:
通常,最佳實踐是使用Map
作為變量的類型,然后根據代碼的需要實例化實現類型。 除非您需要一些排序保證,否則HashMap
通常是首選,在這種情況下LinkedHashMap
或TreeMap
是不錯的選擇。
所有類都實現了Map接口,並提供了大部分相同的功能。 最重要的區別是條目的迭代順序:
HashMap絕對不保證迭代順序。 當添加新元素時,它甚至可以(並且將)完全改變。 TreeMap將根據其compareTo()方法(或外部提供的Comparator)根據鍵的“自然排序”進行迭代。 此外,它還實現了SortedMap接口,該接口包含依賴於此排序順序的方法。 LinkedHashMap將按照將條目放入映射的順序進行迭代“Hashtable”是基於散列的映射的通用名稱。 在Java API的上下文中,Hashtable是Java 1.1之前的一個過時類,它存在於集合框架之前。 它不應再被使用,因為它的API混雜了復制功能的過時方法,並且它的方法是同步的(這可能會降低性能並且通常是無用的)。 使用ConcurrrentHashMap而不是Hashtable。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.