一.前言
- 以前对Vector这对象很陌生,用的少,对象的名字(Vector矢量,向量)也让人摸不着头脑,以为是什么新东西...
- 前文已经学习了ArrayList和LinkedList的源码,原本打算写个Vector源码分析的,但看了一下,Vector和ArrayList一样啊,于是作罢。本文就简单的对比下这三种List。
二.Vector & ArrayList
- Vector线程安全,所有的方法都synchronized。ArrayList线程不安全,裸奔。
- 扩容
//ArrayList public void ensureCapacity(int minCapacity) { modCount++; int oldCapacity = elementData.length; if (minCapacity > oldCapacity) { Object oldData[] = elementData; //直接扩到(oldCapacity * 3)/2 + 1 int newCapacity = (oldCapacity * 3)/2 + 1; if (newCapacity < minCapacity) newCapacity = minCapacity; // minCapacity is usually close to size, so this is a win: elementData = Arrays.copyOf(elementData, newCapacity); } } //Vector private void ensureCapacityHelper(int minCapacity) { int oldCapacity = elementData.length; if (minCapacity > oldCapacity) { Object[] oldData = elementData; //当数组溢出时容量增加的量capacityIncrement,Vector构造函数里指定 //扩到oldCapacity + capacityIncrement或者oldCapacity * 2 int newCapacity = (capacityIncrement > 0) ? (oldCapacity + capacityIncrement) : (oldCapacity * 2); if (newCapacity < minCapacity) { newCapacity = minCapacity; } elementData = Arrays.copyOf(elementData, newCapacity); } }
- 版本:Vector和Hashtable一样,所以jdk1.0就有的东西,代码质量一般。ArrayList在1.2里面出现。
- 命名:习惯ArrayList。比喻Vector removeElementAt(int index),而ArrayList remove(int index)。
三.ArrayList & LinkedList
- ArrayList内部用数组实现,LinkedList内部用双向链表实现。
- ArrayList遍历元素效率高,LinkedList插入删除元素效率高。
- 但问题不是绝对的,还是那句话,不同场景使用适合自己的数据结构。
四.PS
超无技术含量的文章,欢迎拍砖,欢迎点评,让我发现Vector & ArrayList & LinkedList还有什么能让我眼前一亮的东西。