Vector线程安全的 内部是数组 初始大小为10
线程安全
public synchronized boolean add(E e)
public synchronized E remove(int index)
初始大小为10
public Vector() {
this(10);
}
public Vector(int initialCapacity) {
this(initialCapacity, 0);
}
public Vector(int initialCapacity, int capacityIncrement) {
super();
if (initialCapacity < 0)
throw new IllegalArgumentException("Illegal Capacity: "+
initialCapacity);
this.elementData = new Object[initialCapacity];
this.capacityIncrement = capacityIncrement;
}
protected Object[] elementData;
新增1倍
private void grow(int minCapacity) {
// overflow-conscious code
int oldCapacity = elementData.length;
int newCapacity = oldCapacity + ((capacityIncrement > 0) ?capacityIncrement : oldCapacity);
if (newCapacity - minCapacity < 0)
newCapacity = minCapacity;
if (newCapacity - MAX_ARRAY_SIZE > 0)
newCapacity = hugeCapacity(minCapacity);
elementData = Arrays.copyOf(elementData, newCapacity);
}
示例
public class T19 {
public static void main(String[] args) {
Vector vector=new Vector();
vector.add("xixi");
vector.add("lili");
vector.add("cici");
vector.remove("xixi");
System.out.println(vector); //[lili, cici]
}
}
toString()
public synchronized String toString() {
return super.toString();
}
public String toString() {
Iterator<E> it = iterator();
if (! it.hasNext())
return "[]";
StringBuilder sb = new StringBuilder();
sb.append('[');
for (;;) {
E e = it.next();
sb.append(e == this ? "(this Collection)" : e);
if (! it.hasNext())
return sb.append(']').toString();
sb.append(',').append(' ');
}
}
ArrayList 非线程安全的 内部是数组
非线程安全的
public boolean add(E e)
public boolean remove(Object o)
内部是数组
public ArrayList() {
this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}
transient Object[] elementData;
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
初始大小
/**
* Default initial capacity.
*/
private static final int DEFAULT_CAPACITY = 10;
新增0.5倍
private void grow(int minCapacity) {
// overflow-conscious code
int oldCapacity = elementData.length;
int newCapacity = oldCapacity + (oldCapacity >> 1);
if (newCapacity - minCapacity < 0)
newCapacity = minCapacity;
if (newCapacity - MAX_ARRAY_SIZE > 0)
newCapacity = hugeCapacity(minCapacity);
// minCapacity is usually close to size, so this is a win:
elementData = Arrays.copyOf(elementData, newCapacity);
}
示例
import java.util.ArrayList;
public class T19 {
public static void main(String[] args) {
ArrayList arrayList=new ArrayList();
arrayList.add("xixi");
arrayList.add("lili");
arrayList.add("cici");
arrayList.remove("xixi");
System.out.println(arrayList);//[lili, cici]
}
}
LinkedList 非线程安全的 内部为双向链表
非线程安全的
public boolean add(E e) {
linkLast(e);
return true;
}
/**
* Links e as last element.
*/
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++;
}
public boolean remove(Object o)
双链表结构
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;
}
}
新增方法
1 public boolean add(E e) {
linkLast(e);
return true;
}
2 public boolean offer(E e) {
return add(e);
}
3 public void push(E e) {
addFirst(e);
}
获取第一个元素
public E peek() {
final Node<E> f = first;
return (f == null) ? null : f.item;
}
获取第一个元素并删除
public E poll() {
final Node<E> f = first;
return (f == null) ? null : unlinkFirst(f);
}
示例
public class T19 {
public static void main(String[] args) {
LinkedList linkedList=new LinkedList();
linkedList.add("xixi");//[xixi]
linkedList.offer("lili");//[xixi,lili]
linkedList.push("cici");//[cici,xixi,lili]
linkedList.remove("xixi");//[cici,lili]
linkedList.peek();//cici [cici,lili]
linkedList.poll();//cici [lili]
System.out.println(linkedList);//[lili]
}
}