ArrayList底层封装了可变数组,LinkedList底层是单向链表的数据结构,数组在内存空间中是连续的,其读取的时候,会使用到CPU的缓存机制(空间局部性),即预读连续的一部分数据进行运算,效率很高。单向链表的话它在内存中是分散存在,由指针相连,所以遍历集合的时候无法向数组一样高效的利用CPU的缓存机制,所以ArrayList在遍历的效率上是比LinkedList高。
空间局部性:CPU在从内存中取数时,为了提高效率,减少CPU与内存的交互(CPU与内存处理数据的速度是有质的区别),提高CPU利用率,CPU在取内存数据时,会取一整块连续的内存区域的数据到CPU的缓存中。
时间局部性:CPU在执行循环等操作指令时,会执行一整个完整的循环操作,此为时间局限性。