ArrayList和LinkedList的区别

来源:互联网 发布:c语言算法是什么意思 编辑:程序博客网 时间:2024/06/08 06:52

其实说到这两者的区别,网上已经有很多了,但是我想说的不是这些。

关于这两者我们都知道ArrayList适合于查询和修改数据,而LinkedList更适合于增加和删除数据(数据量小时其实没有ArrayList效率高)。

但是这是为什么呢?

首先看这两者的后缀名:List,表明都是List的实现类,这是一样的地方

然后看前缀:Array 和Linked,这是不一样的地方

java规范之一就是见名知义,Array单词的意思是数组,那么就很好理解了

看ArrayList的源代码会发现,ArrayList的实现机制的数组,所以会取这样的一个名字

那么数组的特性ArrayList应该也会有了

数组的特性之一:数组大小唯一,在定义数组的时候必须要指定大小

ArrayList底层代码也是一样的,但是ArrayList可以做到List的特性:数据大小可以任意改变,那是因为ArrayList在做增删操作的时候是先创建一个新的数组,把原来的数组做了改动后再放置进去的,所以这样就可以看出来,在做增删操作的时候其实底层代码比较复杂,所以效率很低,这就是做增删操作时一般不使用ArrayList集合

数组的特性之二:数组索引值,可以快速访问数组中的任意一个位置上的值。

数组访问值采用 数组名 [ 索引值 ] 的方式,而ArrayList是 集合名.get(索引值) 的方式只是换了一个外在的表现形式

但是从这一点上可以看出ArrayList查询数据时效率非常高,一步到位

既然查询很快,那么要修改这个被查询出来的值也就会很快了

这就是ArrayList集合用于查询和修改时效率高的原因

再来说LinkedList;

Linked:链接,链表

这里的LinkedList是双向链表

双向:即为每一个元素都应该有上一个元素的索引和下一个元素的索引

这里使用应该是指当元素个数为1时无上下元素的索引,其他所有元素集合内的第一个元素无上一个元素的索引、最后一个元素无下一个元素的索引

0 0
原创粉丝点击