Vector
- new Vector(),初始化长度为10的数组,增量为0
- public synchronized boolean add(E e) 。线程安全方法+synchronized锁。默认扩容为原来的2倍,如果手动指定了capacityIncrement的值,那么就可以按照指定的增量进行扩容。
- public synchroniezed boolean insertElementAt (E e,int index)。① .考虑扩容 [ ensureCapacityHelper(elementCount + 1);], ② . 移动元素[ System.arraycopy(elementData, index, elementData, index + 1, elementCount - index);],③ 添加元素[ elementData[index] = obj; ],④ .元素个数增加[ elementCount++; ]。
- public synchronized remove(int index).
ArrayList
- new ArrayList()。JDK1.7,1.8初始化长度为0的空数组,empty_elementdata,defaultcapacity_empty_elementdata。JDK1.6初始化长度为10的数组。避免浪费空间。
- private void add(E e),第一次添加元素,扩容为长度为10的数组。扩容为1.5倍。
Stack
Stack是Vector的子类。
- peek()
- pop(): 先peek,再删除size-1位置的元素。
- push()
LinkedList
- new LinkedList().什么也没干,也没有添加节点。
- public void add(E e){ linkLast(e); } .添加在最后。
- public void remove(Object o);
void linkLast(E e){
final Node<E> l=last;
final Node<E> newNode=new Node<>(l,e,null);
last=newNode;
if(l==null)
first=newNode;
else l.next=newNode;
size++;
modCount++;
}
private static class Node<E>{
E item;
Node<E> next;
Node<E> prev;
Node(Node<E> prev,E element,Node<E> next){
this.item=element;
this.next=next;
this.prev=prev;
}
}
public boolean remove(Obejct o){
if(o==null){
for(Node<E> x=first;x!=null;x=x.next){
if(x.item==null){
unlink(x);
return true;
}
}
}else{
for(Node<E> x=first;x!=null;x=x.next){
if(o.equal(x.item)){
unlink(x);
return true;
}
}
}
return false;
}
E unlink(Node<E> x) {
// assert x != null;
final E element = x.item; //当前要删除的节点数据。
final Node<E> next = x.next; // 被删除节点的下一个节点
final Node<E> prev = x.prev; // 被删除节点的上一个节点
if (prev == null) { // 当前节点是第一个,则Pre为null
first = next;
} else {
prev.next = next;
x.prev = null;
}
if (next == null) { // 当前节点是最后一个。
last = prev;
} else {
next.prev = prev;
x.next = null;
}
x.item = null;
size--;
modCount++;
return element;
}