簡體   English   中英

HashMap與ArrayList插入性能的混淆

[英]HashMap vs. ArrayList insertion performance confusion

根據我的理解,哈希表插入為O(1),對於數組列表,插入為O(n),因為對於哈希表,哈希函數會計算哈希碼和索引並插入條目,並且每次輸入新數組時,數組列表都會進行比較元件。

首先,復雜度為O(1)的操作並不總是比復雜度為O(n)的操作花費更少的時間。 O(1)僅表示該操作花費一個恆定時間(可以是任何值),而不管輸入的大小如何。 O(n)表示操作所需的時間隨着輸入大小的增加而線性增加。 這意味着從理論上講,只有當n為無窮大時,O(1)才會比O(n)花費更少的時間。

現在來看您的示例, ArrayList.add()操作以攤銷的恆定時間運行,這意味着盡管特定迭代可能要花費O(n)時間,但隨時間分布的平均復雜度為O(1)。 有關攤銷固定時間的更多信息,請參閱問題。

當您在ArrayList的最后添加項目時, ArrayListHashMap快,因為不需要將ArrayList的元素移到右側,如果您在HashMap的前面添加項目,則可以看到HashMap的效率。所述ArrayList這樣arrayList.add(0, str)

檢查時,請使用1000作為外循環,而不是100000否則可能會掛起。

暫無
暫無

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

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