天天看点

LinkedList和ArrayList的区别(Vector)

上一篇博客刚刚简单介绍了一下ArrayList,这篇我就简单说一下和ArrayList同是集合的LinkedList吧!!

LinkedList:底层是双向链表实现,通过移动指针来实现对数据的操作的,所以它对数据的增删速度快;

我们说了它的底层是双向链表实现,那我们就看看链表里面都有什么。

链表:它的基本元素是节点,它包含数据域和指针域,数据域里面就是当前节点中的数据,而指针域呢是存储的当前节点的上个节点的位置和当前节点的下个节点的位置。

LinkedList和ArrayList的相同点:它们都是List接口的实现类,它们都没有加锁,所以线程不安全

这里说到了这两个线程都不安全,那我们想要用List集合,又想要线程安全怎么办呢,这里就有了一个新的List集合叫做Vector。

Vector:因为Vector的所有方法都是同步的(也就是加了锁的),所以它的线程肯定是安全的(这里我要说一下,在java中只要说线程安全,那么它肯定是牺牲了它的性能,对数据操作的速度就会降低)。

Vector的扩容机制:Vector和ArrayList的默认大小一样是10,而它的扩容机制和ArrayList不同,它是进行两倍扩容,在原来的基础上乘以二,它在扩容的时候使用三目运算符进行判断,如果数组需要的长度大于数组的实际长度,那就将数组长度乘以二,接着还是将原来数组中的数据拷贝到新的数组中。

所以从扩容机制来看,使用ArrayList时有利于节省空间,但是线程不能保证安全,而Vector可以保证线程的安全,如果数据量大又需要保证线程安全,最好是使用Vector。