ArrayList底层实现是数组object,而LinkedList底层实现是双向链表(JDK1.7开始)。
故ArrayList具有随机访问的特性,实现了RandomAccess接口,查找的效率高。缺点就是插入和删除元素效率低,若是插入末端时间复杂度为O(1),若插入在数组中间i位置(1<i<n),则后续元素需要移动(n-i)次,时间复杂度为O(n)。由于数组连续存储,内存空间占用小,但是ArrayList需要在尾部留一部分空间。
而LinkedList底层实现为双向链表,双向链表单节点结构为指向前驱节点的指针、Data、指向后驱节点的指针,故内存空间占用比数组大。链表具有插入、删除方便的特征,只需将指针断开重定向即可,时间复杂度近乎为O(1)。但是查找方面由于是双向链表平均查找时间都为(n/2),故时间复杂度为O(n)。
网友评论