数组和链表的区别

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);来复制后面的元素后移。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值