[英]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
的最后添加項目時, ArrayList
比HashMap
快,因為不需要將ArrayList
的元素移到右側,如果您在HashMap
的前面添加項目,則可以看到HashMap
的效率。所述ArrayList
這樣arrayList.add(0, str)
檢查時,請使用1000
作為外循環,而不是100000
否則可能會掛起。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.