[英]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)。
遍歷此集合需要的時間與HashSet實例的大小(元素的數量)加上后備HashMap實例的“容量”(存儲桶的數量)之和成比例。 因此,如果迭代性能很重要,則不要將初始容量設置得過高(或負載因子過低),這一點非常重要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.