Vector
被ArrayList取代
线程安全
无迭代器Iterator
遍历时使用Enumeration
Enumeration en=v.elements(); //获取枚举
while(en.hasMoreElements()){ //判断集合是否有元素
System.out.println(en.nextElement()); //获取集合中的元素
}
ArrayList
底层是数组实现,其特点在于查询修改快,增加和删除慢。
增加和删除需要移动元素,最好的情况是对末尾元素进行操作, 最坏的情况是对首元素操作。
初始空间为10,空间不够自动增长为150%。集合中添加的是引用数据类型,实际存储的是指向具体对象实体内容的地址。
数组中空闲位置可以访问,为默认值0或者null;集合中空闲空间虽为null,但是不可访问,集合的最大访问地址为index=size()-1。
LinkedList
底层为链表实现
查询和修改慢(要修改则需要先查询),增加和删除快。
查找时可查找第一个元素,getFirst();查找最后一个元素getLast();根据索引查找,get(index);
根据索引查找首先判断所以是否越界;其次,若索引index<size/2则从首元素向后查找;否则从末尾开始向前查找。
LinkedList中的源码
/**
* Returns the (non-null) Node at the specified element index.
*/
Node<E> node(int index) {
// assert isElementIndex(index);
if (index < (size >> 1)) {
Node<E> x = first;
for (int i = 0; i < index; i++)
x = x.next;
return x;
} else {
Node<E> x = last;
for (int i = size - 1; i > index; i--)
x = x.prev;
return x;
}
}