Java容器2——Collection

  1. Collection继承关系图
  2. Collection接口
  3. List接口
  4. Set接口
  5. Queue接口

以下内容参考《代码随想录知识星球精华(最强⼋股⽂)第三版》整理。

Collection继承关系图

(该图基于JDK8,仅包含部分类。为了方便查看,部分关系未画出)

Collection继承关系

Collection接口

Collection接口

  • Collection下的所有实现类都是继承⾃AbstractCollection,该类将基础⽅法 size 和 iterator 抽象化,但是实现了其他的⽅法
  • AbstractCollection下派⽣出AbstractList、AbstractSet、AbstractQueue、ArrayQueue
  • List下的全部继承⾃AbstractList,List是一个存储有序的集合,允许重复,每个元素都有一个索引
  • Set下的继承⾃AbstractSet,Set是一个无需存储的集合,不允许重复

Java中经常使⽤的语法糖”for each”循环可以与任何实现了Iterable接⼝的对象⼀起⼯作
Collection通过调用iterator()⽅法返回⼀个Iterator对象,这就是常⽤的迭代器,其中包含hasNext()、next()、remove()、forEachRemaining(Consumer)4个⽅法。

Iterator()的功能简单,只能单向移动:

  1. 调⽤iterator()⽅法返回⼀个Iterator对象
  2. 第⼀次调⽤Iterator的next()⽅法,返回序列的第⼀个元素。此后每调⽤⼀个next(),会返回序列的下⼀个元素。调⽤next()⽅法前最好先调⽤hasNext()⽅法,判断序列后⾯是否还有元素
  3. remove()删除上次next()返回的对象,remove()只能在next()之后使⽤,并且⼀个remove()匹配⼀个next(),不能重复调⽤
  4. 使⽤hasNext()判断序列中是否还有元素

List接口

List接口

  • List接⼝常⽤的实现类有ArrayList、LinkedList
  • 相比Collection,List多出sort()、get()、listIterator()等⽅法,listIterator返回⼀个链表迭代器

List有着特殊的迭代器接口ListIterator,该接口继承自Iterator接⼝。ListIterator是⼀个功能更加强⼤的迭代器,Iterator是单向的,但ListIterator是双向的,ListIterator增加了previous()和hasPrevious()⽅法⽤来反向遍历。注意只能List使⽤ListIterator。

ListIterator

Set接口

Set接口

  • Set常⽤的实现类有HashSet、TreeSet、LinkedHashSet

Queue接口

Queur接口

Deque

  • Deque接⼝继承⾃Queue,在Deque的基础上更加细化,可以选择从头部或者尾部操作。如果Deque中使⽤Queue的⽅法,⼀定要清楚实现类是从头部还是尾部操作的
  • 很多实现类既实现类List接⼝,⼜实现类Queue接⼝,如LinkedList即实现了List接口又实现了Deque接口(因此LinkedList即可以使用add又可以使用addLast)

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至header-files@foxmail.com。