您的位置:首页 > 其它

数组和链表的区别

2017-05-08 20:30 197 查看
1、数组的存储空间是一大片连续的,链表的存储空间是不定的,每个链表的节点元素都会存储该节点的数据和下个节点的地址指向。数组初使化必须制定大小,而链表却不需要便是这个原因。

2、就增删改查而言,数组因为地址是连续的,所以数组的查询修改很快,但是增删的时候由于需要移动后面所有的元素反而较慢,对应的链表在查询的时候由于需要从第一个元素开始,直到找到你想要的元素,反而在增删的时候只需要修改对应节点的指针就可以了。

数组静态分配内存,链表动态分配内存; 

数组在内存中连续,链表不连续; 

数组元素在栈区,链表元素在堆区; 

数组利用下标定位,时间复杂度为O(1),链表定位元素时间复杂度O(n); 

数组插入或删除元素的时间复杂度O(n),链表的时间复杂度O(1)。

常用的ArrayList使用的是数组实现,LinkedList使用的是链表实现。
ArrayList类:
contains方法只能判断存储在栈里的数据。依赖于indexOf方法。
indexOf方法是用来获取指定元素在集合里的位置,-1时表示集合了不存在。但是值得注意的一点是,indexOf方法是通过遍历集合用equals方法来决定两个值是否相等的,注意indexOf方法传入参数的类的equals实现,比如说如果继承的类包括自己都没重写Object的equals方法的,则只是比较地址,但是当类似于String的时候就会比较里面的值了,以为String重写了equals方法,回去判断值是否相等,而不是简单的比较对象的地址。
arrayList在增加一个元素的时候,如果原来的大小不够了,会去扩容当前大小的一半,当增加一个集合的时候,也会去算增加一半够不够,不够就直接加上增加集合的大小。arrayList在增加一个元素的时候会通过System.arraycopy(elementData, index, elementData, index + 1,size - index);来复制后面的元素后移。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: