1.ArrayList和Vector的区别
第一句话:ArrayList和Vector底层都是数组实现的,初始容量都为10;在ArrayList的底层,是通过定义一个DEFAULT_CAPACITY的常量来指定的,而Vector的底层,是直接在空参构造中,通过写死了一个this(10)来指定的;
第二句话:Vector大部分方法的底层实现,都加了 synchronized关键字,所以Vector是线程同步的,而 ArrayList不是;
第三句话:在查看API时,发现Vector有4个构造方法,比 ArrayList多了一个。而多的这个构造方法,是跟扩容有关的。ArrayList默认的扩容,在JDK1.6时,是按照新容量 =(原容量*3)/2+1来计算的,大约50%左右;而在JDK1.7以后,是按照新容量 = 原容量 +(原容量 >> 1)来计算的,大约也在50%左右,所以都不是很多资料上说的就是50%,同时由于位运算的速度比快,所以ArrayList在JDK1.7之后效率更高,也可以看出来,;而在Vector中,默认情况下,是100%增长的,但是我们可以通过比ArrayList多的那个构造方法,来指定它增容的大小。
2.ArrayList与LinkedList
第一句话:ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构,它继承于AbstractSequentialList的双向链表,由于AbstractSequentialList 实现了get(i)、set()、add() 和 remove()这些骨干性函数,这也降低了List接口的复杂程度。
第二句话:ArrayList与LinkedList都是不是同步的。如果多个线程同时访问一个链接列表,而其中至少一个线程从结构上修改了该列表,则它必须保持外部同步。同步的方法就是使用Collections.synchronizedList(Collection<T> c)来“包装”该列表。
第三句话:对于随机访问get和set,ArrayList绝对优于LinkedList,因为从源码可以看出,ArrayList想要get(int index)元素时,直接返回index位置上的元素;而LinkedList需要通过for循环进行查找,虽然LinkedList已经在查找方法上做了优化,比如index < size / 2,则从左边开始查找,反之从右边开始查找,但是还是比ArrayList(随机查找)要慢。
第四句话:从源码来看,ArrayList想要在指定位置插入或删除元素时,主要耗时的是System.arraycopy动作,会移动index后面所有的元素;LinkedList主耗时的是要先通过for循环找到index,然后直接插入或删除。这就导致了两者并非一定谁快谁慢!
- LinkedList ArrayList Vectorlinkedlist arraylist vector java linkedlist arraylist框架vector linkedlist arraylist vector list linkedlist arraylist vector 相同点linkedlist arraylist vector linkedlist arraylist linkedlist arraylist java arraylist机制vector linkedlist arraylist java p11 arraylist hashtable hashmap vector