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 |
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方法的作用;