Java集合源码学习(1)_架构

时间:2022-05-30 17:53:04

Java集合,学习了一下源码;代码的架构值得学习理解;

本文仅整理了java集合的常用的类的结构,具体的接口和集合实现会在后面的文章中一边学习一边记录;

1:Collection接口


集合的根接口,继承了接口Iterable<E>;代表了多个元素的集合,该集合是否有序、是否允许重复值,都是在具体的子类中定义的;
java doc中有这样一句话:Bags or multisets (unordered collections that may contain duplicate elements) should implement this interface directly.
接口中定义了集合通用的方法:add 、addAll、remove、removeAll、clear、contains、containsAll、isEmpty、size、toArray、iterator等方法
任何一个实现都可以返回一个Iterator来遍历集合内所有元素

2:List接口

继承接口Collection
一个有序(插入顺序)允许重复的集合,可以根据index来查询;
增加了根据位置信息操作集合的若干操作,add(index,E)、get(index)、indexof(index)、remove(index)、set(index,E)等方法;
还有一个获取ListIterator的方法,ListIterator可以增加或者替换当前位置的元素,可以向前遍历集合

2.1:ArrayList

2.2:LinkedList

2.3:Vector

2.4:CopyOnWriteArrayList


3:Set接口

继承接口Collection
一个不允许重复的集合,判断标准为equals方法,是否允许null要看具体的实现;
没有增加特别的方法

3.1SortedSet接口

有序的Set,排序方法为compareTo或者提供的Comparator;
提供了几个方法:first()、last()、headSet()、tailSet()

3.1.1TreeSet

3.2HashSet

3.2.1LinkedHashSet


4:Queue接口

继承接口Collection;
通常而言,顺序是FIFO,例外是优先级队列(顺序由指定的Comparator来决定)和栈(LIFO)
增加了下面几个方法:

  Throws exception Returns special value
Insert add(e) offer(e)
Remove remove() poll()
Examine element() peek()



4.1:BlockingQueue接口

阻塞队列,当队列为空是取数据阻塞,队列满是,插入数据阻塞;
是否是有界队列需要看具体的实现
  Throws exception Special value Blocks Times out
Insert add(e) offer(e) put(e) offer(e, time, unit)
Remove remove() poll() take() poll(time, unit)
Examine element() peek() not applicable not applicable


4.1.1:ArrayBlockingQueue

4.1.2:LinkedBlockingQueue

4.1.3:PriorityBlockingQueue

4.1.4:DelayQueue

4.2:Deque接口

双端队列
  First Element (Head) Last Element (Tail)
  Throws exception Special value Throws exception Special value
Insert addFirst(e) offerFirst(e) addLast(e) offerLast(e)
Remove removeFirst() pollFirst() removeLast() pollLast()
Examine getFirst() peekFirst() getLast() peekLast()


继承了Queue接口,对应的方法实现
Queue Method Equivalent Deque Method
add(e) addLast(e)
offer(e) offerLast(e)
remove() removeFirst()
poll() pollFirst()
element() getFirst()
peek() peekFirst()


也实现了LIFO栈,
Stack Method Equivalent Deque Method
push(e) addFirst(e)
pop() removeFirst()
peek() peekFirst()

4.2.1: BlockingDeque接口

阻塞式的双端队列
First Element (Head)
  Throws exception Special value Blocks Times out
Insert addFirst(e) offerFirst(e) putFirst(e) offerFirst(e, time, unit)
Remove removeFirst() pollFirst() takeFirst() pollFirst(time, unit)
Examine getFirst() peekFirst() not applicable not applicable
Last Element (Tail)
  Throws exception Special value Blocks Times out
Insert addLast(e) offerLast(e) putLast(e) offerLast(e, time, unit)
Remove removeLast() pollLast() takeLast() pollLast(time, unit)
Examine getLast() peekLast() not applicable not applicable

FIFO的BlockingQueue
BlockingQueue Method Equivalent BlockingDeque Method
Insert
add(e) addLast(e)
offer(e) offerLast(e)
put(e) putLast(e)
offer(e, time, unit) offerLast(e, time, unit)
Remove
remove() removeFirst()
poll() pollFirst()
take() takeFirst()
poll(time, unit) pollFirst(time, unit)
Examine
element() getFirst()
peek() peekFirst()

4.3PriorityQueue类


5:Map接口

保存的是键值对,不能有重复的key,每个key最多对应一个value;
是否允许null和是否有序需要看具体的实现类;
equals方法的作用;

5.1ConcurrentMap接口

5.1.1ConcurrentHashMap

5.2SortedMap接口

5.2.1TreeMap

5.3HashMap类

5.3.1LinkedHashMap类

5.4Hashtable类

5.5WeakHashMap类

5.6IdentityHashMap类