数据中数组的内存是顺序存储的,而链表是随机存取的。程序员
数组随机访问效率很高,但插入删除操做的效率比较低。数组
链表在插入删除操做上相对数组有很高的效率,而若是访问链表中的某个元素,那就要从表头逐个遍历,直到找到所须要的元素为止,因此链表的随机访问效率比数组低。编码
链表不存在越界问题,数组有越界问题。对象
数组节省空间可是长度固定。链表虽然变长,可是占了更多的存储空间。索引
静态)数组从栈中分配内存空间,对于程序员方便快速,可是自由度小。链表从堆中分配空间,自由度大,但申请管理比较麻烦。接口
ArrayList和LinkedList都实现了List接口,他们有如下的不一样点:内存
ArrayList是基于索引的数据接口,它的底层是数组。它能够以O(1)时间复杂度对元素进行随机访问。与此对应,LinkedList是以元素列表的形式存储它的数据,每个元素都和它的前一个和后一个元素连接在一块儿,在这种状况下,查找某个元素的时间复杂度是O(n)。rem
相对于ArrayList,LinkedList的插入,添加,删除操做速度更快,由于当元素被添加到集合任意位置的时候,不须要像数组那样从新计算大小或者是更新索引。it
LinkedList比ArrayList更占内存,由于LinkedList为每个节点存储了两个引用,一个指向前一个元素,一个指向下一个元素。效率