答案 0 :(得分:11)
恒定时间意味着每个操作执行所需的时间很难。
线性时间表示ArrayList
越长(包含的对象越多),操作时间越长。连接是线性的,即time(op) <= CONST * #elements
在复杂性分析中,我们将其称为big O notation,线性时间为O(n)
,常量时间为O(1)
原因是:
答案 1 :(得分:9)
含义是:
常量表示时间总是相同的,与List的长度无关。
[常量时间在Big-O notation中也称为 O(1)
线性意味着List越长,时间越长,但是以线性方式,例如对包含20个元素的列表执行线性操作将需要两倍于包含10个元素的列表所需的时间。
[线性时间在Big-O notation中也称为 O(n)
预精化:当比较算法通常提供最差情况性能时,这意味着所需时间小于或等于线性。
在你的情况下,List的实现是基于数组(所以名称 ArrayList ),如下所示:
访问时间是不变的,因为当程序知道列表的第一个元素在哪里以及每个单元格有多大时,它可以使用简单的数学直接获取 n -th元素,如: / p>
element_n_cell = element_1_cell + (cell_size * n)
插入和删除更加耗时,原因有两个:
当您在某个位置插入或删除元素时,需要移动以下所有元素。
无法调整数组的大小,因此当您实例化一个新的ArrayList时,Java将创建一个具有预定义长度 s 的数组,并且它将使用相同的数组作为只要它适合。当您添加(s + 1) -th元素时,程序需要创建一个更大的数组并复制新数组中的所有元素。
答案 2 :(得分:0)
理解恒定时间访问
java.util.ArrayList 实现了 java.util.RandomAccess 接口,这是一个标记接口,表示您可以直接访问此集合的任何元素。这也意味着访问任何元素都需要相同的时间(恒定时间)。
如果我们使用 java.util.LinkedList,访问最后一个元素比访问第一个元素需要更多的时间。