一、ArrayList 是无序,非线程安全的。算法
底层有数组形式进行存放数据。在添加数据时首先回去检查原有的数组长度是否足够。若是原有的数组长度不足时,就会按照必定规则进行新建一个新的长度的数据,而后将旧数组的数据拷贝过去,而后在新的数据基础上增长元素。源码以下:数组
a、调用add方法安全
b、先判断原有开辟的数组长度是否足够,不足时新建数组开辟地址,并将旧数组拷贝过去数据结构
c、 最后再将须要添加的元素添加进去线程
一、Vector是非有序,线程安全的。3d
底层使用数组开辟存储地址存储数据。在添加元素时过程基本与ArrayList一致,区别在于:Vector是线程安全的,以及在自动扩展大小时扩展的算法不同。blog
a、在调用add方法时:源码
b、add方法是使用synchronized关键字修饰,依然是先检查大小,扩展的大小方式与ArrayList有区别基础
c、 最后再将须要添加的元素添加进去add方式是使用synchronized关键字修饰扩展
三、LinkedList是有序,非线程安全的
与ArrayList和Vector的区别主要是存储的数据结构不同 。 底层使用的是链表的数据结构来实现的。源码实现以下图