Ahm*_*aya 5 java data-structures
我一直在学习Java SE 7的技巧.我读过一条声明ArrayList:
我想知道什么是恒定和线性时间访问?
含义是:
常量意味着时间总是相同的,与List的长度无关.
[ 常数时间在Big-O表示法中也称为O(1) ]
线性意味着List越长,时间越长,但是以线性方式,例如对包含20个元素的列表执行线性操作,将需要两倍于具有10个元素的列表所需的时间.
[ 线性时间在Big-O表示法中也称为O(n) ]
精确化:当比较算法通常提供最差情况下的性能时,这意味着所需的时间小于或等于线性.
在你的情况下,List的实现基于数组(所以名称ArrayList),如下所示:

访问时间是不变的,因为当程序知道列表的第一个元素在哪里以及每个单元格有多大时,它可以使用简单的数学直接获取第n个元素,如:
element_n_cell = element_1_cell + (cell_size * n)
Run Code Online (Sandbox Code Playgroud)
由于两个原因,插入和删除更加耗时:
在位置中插入或删除元素时,需要移动以下所有元素.
数组无法调整大小,因此当您实例化一个新的ArrayList时,Java将创建一个具有预定义长度s的数组,并且只要它适合它就会使用相同的数组.当您添加第(s + 1)个元素时,程序需要创建一个更大的数组并复制新数组中的所有元素.