近抽空把java.lang下面常用的那些容器类型(数据结构)复习了一下,这些东西是基础,平时使用的时候也可以很容易查得到,有些方法大概知道,但是总是弄混,如果可以记住那些重要方法,并且能够熟练使用的话,还是可以让编码过程变得容易很多。另外一个是实现机制,对于常用数据结构的实现机制,应该说是必须要熟知的。
  另外,并发容器我之前整理过,放在这篇文章里。
  Queue
  add和offer的区别在于达到上add抛出异常,offer返回false;
  remove和poll的区别在于,队列为空时前者抛出异常,后者返回空;
  element和peek都返回队列头部元素,但是前者失败不抛出异常,后者返回空。
  boolean add(E e);
  boolean offer(E e);
  E remove();
  E poll();
  E element();
  E peek();
  PriorityQueue,内部实现是一个Object[]queue承载的堆。
  Deque,双端队列(double-ended queue),在Queue基础上,增加了这样几个方法:
  void addFirst(E e);
  void addLast(E e);
  boolean offerFirst(E e);
  boolean offerLast(E e);
  E removeFirst();
  E removeLast();
  E pollFirst();
  E pollLast();
  E getFirst();
  E getLast();
  E peekFirst();
  E peekLast();
  boolean removeFirstOccurrence(Object o);
  boolean removeLastOccurrence(Object o);
  ArrayDequeue:数组实现,扩容策略是容量翻倍。
  List
  boolean add(E e);
  boolean remove(Object o);
  E get(int index);
  E set(int index,E element);
  void add(int index,E element);
  E remove(int index);
  ArrayList,扩容策略是(oldCapacity*3)/2+1。
  LinkedList,它除了实现自List接口外,还实现了Deque接口。
  Vector,实现自List接口,内部实现是个数组,线程安全,扩容策略是(capacityIncrement>0)?(oldCapacity+capacityIncrement):(oldCapacity*2)。
  Stack是Vector的子类,增加了一些栈的方法:
  E push(E item)
  E pop()
  E peek()
  boolean empty()
  Map
  boolean containsKey(Object key);
  boolean containsValue(Object value);
  V get(Object key);
  V put(K key,V value);
  V remove(Object key);
  Set<K>keySet();
  Collection<V>values();
  Set<Map.Entry<K,V>>entrySet();
  SotedMap接口,key是有序的map:
  SortedMap<K,V>subMap(K paramK1,K paramK2);
  SortedMap<K,V>headMap(K paramK);
  SortedMap<K,V>tailMap(K paramK);
  K firstKey();
  K lastKey();