先补一下基础:位运算 blog.csdn.net/pcwl1206/ar… 这对后面理解数据结构和底层算法原理有帮助。
1,LinkedList
zhuanlan.zhihu.com/p/144597359
2,
PriorityQueue extends AbstractQueue<E>(extends AbstractCollection<E>(implements Collection<E>) implements Queue<E>)
transient Object[] queue;
int size;
private final Comparator<? super E> comparator;
transient int modCount;
add(E e) = offer(E e)
peek() 返回 (E) queue[0]
ArrayList extends AbstractList<E> implements List<E>
transient Object[] elementData;
private static final int DEFAULT_CAPACITY = 10;
private int size;
//对于链表中的指针,其实就是java中的对象引用。
LinkedList extends AbstractSequentialList(extends AbstractList) implements List,Deque
transient int size = 0;
transient Node<E> first;
transient Node<E> last;
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;
}
}
Stack extends Vector<E> 后进先出。
push(E item) 添加一个元素
peek(E item) 返回栈内最上层一个元素(返回最后添加的元素)
pop(E item) 弹出一个元素 方法里有peek(E)和removeElementAt(总长度-1) 【removeElementAt中有System.arraycopy(elementData, index + 1, elementData, index, j)】
Vector extends AbstractList<E> implements List<E>
protected Object[] elementData;
protected int elementCount;
protected int capacityIncrement;
Deque 是一个接口,extends Queue(Queue也是接口) (Queue extends Collection)
ArrayDeque implements Deque<E> extends AbstractQueue<E>
transient Object[] elements;
transient int head;
transient int tail; //tail : 尾;尾部
add(E) = addLast(E) 在数组后面添加元素
offer(E) = offerLast(E) = [addLast(E) + return true]
poll() = pollFirst() 删除第一个元素,并返回删除元素的值,如果元素为null,将返回null
remove() = removeFirst() = pollFirst() + 如果没有则抛出异常
peek() = peekFirst() 获取第一个元素,如果没有返回null
element() = getFirst() 获取第一个元素,如果没有将抛出异常
下面两个是栈操作,LinkedList也有栈操作,所以有什么总结呢?
push(E) = addFirst(E) 栈顶添加一个元素
pop() = removeFirst()