Vector类
Vector类中所有的方法都是线程同步的 多线程共同访问一个Vector类是安全的
ArrayList类
ArrayList 中所有的方法都是非同步的 不安全 多线程共同访问一个 ArrayList类时要自己处理好线程同步的问题 查询快,增删慢
ArrayList是一个动态数组,实现了List<E>, RandomAccess, Cloneable, java.io.Serializable,并允许包括null在内的所有元素。
LinkedList类
查询慢,增删快 LinkedList是非线程安全
Vector ArrayList LinkedList 的区别:
- 当只有一个线程或者多线程访问确保安全时使用ArrayList 比 Vector 效率高 因为不需要开启额外的监听器
- Vector ArrayList 内部以数组形式来保存集合中的元素因此随机访问集合上的元素有较好的性能
- LinkedList 内部以链表的形式来保存集合中的元素 因此在插入和删除表现优异而在随机访问集合上的元素表现较差
- Vector是同步处理,性能较低;ArrayList是使用异步处理,性能高。
- 一般情况都用ArrayList,ArrayList占据内存小
- ArrayList与Vector都可以设置初始的空间大小,Vector还可以设置增长的空间大小,而ArrayList没有提供设置增长空间的方法
ArrayLis是如何实现动态扩容,以及扩容原则:
1)可以把ArrayList看做动态数组.:
申请一个更大的数组空间,利用新数组=Arrays.copyof(源数组,新数组长度);的方式进行扩容
2)扩容的原则:
可以查看源代码知道:
jre 1.6及以下 old*3/2+1
jre1.7以以上 old+old>>1
所以我们可以看出来,ArrayList集合不适合存储大量数据,因为,存储空间浪费太严重.