我一直在學習Java SE 7的提示我看了一份聲明中關於ArrayList
:ArrayList中恆時間和線性時間訪問
- 訪問在固定時間執行。
- 插入/缺失在線性時間執行。
我想知道什麼是不斷和線性時間訪問?
我一直在學習Java SE 7的提示我看了一份聲明中關於ArrayList
:ArrayList中恆時間和線性時間訪問
我想知道什麼是不斷和線性時間訪問?
恆定時間意味着每個操作將花費多少時間來執行硬約束。
線性時間意味着ArrayList
(包含的對象越多)所需的時間越長。連接是線性的,即time(op) <= CONST * #elements
在複雜的分析,我們稱它作爲big O notation和線性時間爲O(n)
,提供固定時間爲O(1)
它的原因是:
含義是:
恆定意味着時間總是相同的,它並不重要的列表的長度。
[恆定時間也被稱爲O(1)在Big-O notation]
線性意味着越列表的增長,較長是時間,但以線性方式,所以例如,要在包含20個元素的列表上執行線性操作,則需要兩次包含10個元素的列表所需的時間。
[線性時間也被稱爲爲O(n)在Big-O notation]
甲precisation:比較算法時通常提供的最壞情況性能,所以這意味着所需的時間少或等於線性。
在你的情況列表的實現是基於陣列(這樣的名字的ArrayList)是這樣的:
的訪問時間是因爲當程序知道在哪裏不變列表的第一個元素是,每個單元格有多大,它可以使用簡單的數學運算式直接得到:
element_n_cell = element_1_cell + (cell_size * n)
個
插入和刪除更多的時間,昂貴的原因有兩個:
當您插入或在一個位置刪除元素,所有的以下內容需要轉移。
數組不能改變大小,所以當你實例化一個新的ArrayList,Java將創建一個數組與預先定義的長度小號,只要它符合它會使用相同的陣列。當你添加(s + 1) -th元素時,程序需要創建一個更大的數組並複製新數組中的所有元素。
這不是線性時間的原因。雖然它只解釋了最壞的情況,但動態數組也具有線性時間複雜度,因爲在中間插入或刪除元素需要將所有後續元素向右或向左移動。這使得它也成爲O(n)的分析,不僅是最壞的情況 – amit
是的,你是對的!我正在考慮追加:D我會解決它!謝謝 –
它是'Java SE 7'而不是J2SE或Java2SE。 –