簡體   English   中英

在ArrayList的開頭添加元素的時間復雜度是多少?

[英]What is the time complexity of adding an element at the beginning of an ArrayList?

假設我在這個數組中有一個帶有n個元素的ArrayList,我在開頭添加了一個元素:

myArrayList.add(0,'some value');

這次行動的時間復雜程度是多少?

Java Doc沒有指定這一點。

我剛開始學習Java,我看到了句子

An ArrayList in Java is a List that is backed by an array.

這里'支持'是什么意思? 謝謝!

將元素添加到數組的開頭是O(n) - 它需要將所有現有元素移位一個位置。

數組列表中的所有元素都存儲在一個連續的數組中。 如果添加的元素多於數組的當前大小 - 它將自動生成以適應新元素。

最后,O(1)在多次插入時攤銷。

ArrayList.add(0, element)占用線性時間,但常量非常低,因為它可以使用超快速的System.arraycopy

ArrayList文檔在這一點上確實模糊不清 - 我剛剛在SE11中對它進行了研究,並且自收集框架的第一個版本(在Java 1.2中)以來它沒有改變。

我相信ArrayList文檔的作者的意圖是指定,在Java的任何實現上,附加操作(即add(E e)方法)必須以恆定的攤銷時間運行,並且列表插入操作(即add(int index, E e)方法)必須在O(n)時間內運行,其中n是列表的大小。

  • 從頭開始構建列表並在開頭添加大量元素以二次時間運行:O(n 2 )。
  • 將所有元素添加到列表末尾然后調用Collections.reverse(list)以線性時間運行:O(n)。

暫無
暫無

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

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