簡體   English   中英

Big-O:獲取Java HashMap中的所有鍵

[英]Big-O: Getting all of the keys in a Java HashMap

有人知道Java HashMap中的keySet的攤銷分析是什么嗎? O(1)

通過它們進行迭代O(n)嗎?

map.keySet()只是返回對存儲在地圖中的鍵集的引用,因此顯然是O(1)操作。

然后,迭代是對該集合的循環,循環本身內部在地圖的存儲桶上使用循環,因此該操作花費的時間與n + m成比例,其中n是鍵集的大小,m是地圖的容量。

因此,如果您的地圖容量很大,只有一個條目,那么即使只有一個鍵,對keySet的迭代也會在所有存儲桶中循環。

不知道如何用big-o表示法翻譯它。

我只是對2張地圖進行了快速測試,每張地圖都有一個條目。 一張地圖的容量為1000萬,另一張地圖的容量為1。在大型地圖上,鍵集上的迭代(兩種情況下都為一項)的時間要多3500倍(18,843,092 ns與5434 ns)。

ps:它類似於HashSetjavadoc所說的內容:

遍歷此集合需要的時間與HashSet實例的大小(元素的數量)加上后備HashMap實例的“容量”(存儲桶的數量)之和成比例。 因此,如果迭代性能很重要,則不要將初始容量設置得過高(或負載因子過低),這一點非常重要。

您可以檢查keySet的源代碼

以此為基礎遍歷集合是O(n)

暫無
暫無

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

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