前言:这个问题主要是考察集合框架的问题,主要考察三者之间设计的区别,以及使用时如何抉择。
- Vector线程同步(安全),ArrayList、LinkedList线程不同步(不安全)
- Vector是java早期提供的线程安全的动态数组;Arraylist也是动态数组,但不是线程安全的;而LinkedList与前者不同 ,LinkedList是使用双向链表存储的,也不是线程安全的。
- Vector是因为是线程安全的,所以在使用时性能要比ArrayList要差。
- Vector和ArrayList可以根据需要自动增加容量,Vector在扩容的时候是增加一倍,ArrayList在扩容时是增加50%。
- Vector和ArrayList的初始容量都是10,Vector扩容规则是加一倍,即扩容后为20。ArrayList扩容规则在jdk1.7以前是加原大小的1.5倍加一,即10+10/2+1=16。jdk1.7(包含jdk1.7)以后更改为原大小的1.5倍。
- List中的元素有序、允许有重复的元素,Set中不允许有重复元素,其中HashSet的元素无序,LinkedHashSet和TreeSet是有序的。
- LinkedList使用的是双向链表,每个数据节点都有两个指针,分别指向直接前驱和直接后继。删除和插入的时候更改数据节点的后继指针和前驱指针就行,所以速度比数组结构更快。但是随机访问的速度比ArrayList慢。
- Vector和ArrayList内部元素都是以数组形式存储的,所以适合随机访问。除了在头部和尾部插入数据或者删除数据会快一点,其它位置性能会相对较差。比如在中间插入一个元素,需要移动后面所有元素。
详细介绍: