簡體   English   中英

為什么Java不使用ArrayList類來實現Hashtable / HashMap類?

[英]Why Java doesn't use ArrayList class to implement Hashtable/HashMap class?

此QA Java如何實現哈希表? 描述了Hashtable是通過Java中的靜態數組實現的(底層靜態數組將根據項目總數進行細化)。

為什么Java不通過動態數組實現Hashtable,比如ArrayList?

有什么權衡?

調整哈希表的大小時,需要重新定位所有條目。
因此,使用ArrayList會更慢 ,因為在HashTable重新計算所有值之前,ArrayList將復制現在無用的舊值。

調整基礎數組的大小需要重新散列哈希表中的所有項目,這是一項非常昂貴的操作,並使當前數組中任何項目的位置無效 - 這就是為什么每當項目數超過某個閾值(負載)時通常會將數組大小加倍因子)。 由於調整大小是在內部管理的,現有項目必須移動到新位置,因此像ArrayList這樣的“可調整大小的數組”沒有意義。

實現類非常不透明。 由於與真實靜態數組相比, ArrayList相當不具備,因此無需使用它。

你將沒有任何好處,至少以這種方式你可以節省包含哈希映射的靜態數組的包裝器。

調整ArrayList大小就像調整HashMap大小一樣,因為它們都使用靜態底層數組,但是你需要在任何情況下都重新映射地圖的所有元素,所以根本不需要使用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM