概要

首先,我们对Collection进行说明。下面先看看Collection的一些框架类的关系图:

Java 集合系列02之 Collection架构 Collection是一个接口,它主要的两个分支是:List 和 Set。

List和Set都是接口,它们继承于Collection。List是有序的队列,List中可以有重复的元素;而Set是数学概念中的集合,Set中没有重复元素!

List和Set都有它们各自的实现类。

为了方便,我们抽象出了AbstractCollection抽象类,它实现了Collection中的绝大部分函数;这样,在Collection的实现类中,我们就可以通过继承AbstractCollection省去重复编码。AbstractList和AbstractSet都继承于AbstractCollection,具体的List实现类继承于AbstractList,而Set的实现类则继承于AbstractSet。

另外,Collection中有一个iterator()函数,它的作用是返回一个Iterator接口。通常,我们通过Iterator迭代器来遍历集合。ListIterator是List接口所特有的,在List接口中,通过ListIterator()返回一个ListIterator对象。

接下来,我们看看各个接口和抽象类的介绍;然后,再对实现类进行详细的了解。

本章内容包括:

1 Collection简介

2 List简介

3 Set简介

4 AbstractCollection

5 AbstractList

6 AbstractSet

7 Iterator

8 ListIterator

转载请注明出处:www.cnblogs.com/skywang1234…

1 Collection简介

Collection的定义如下:

public interface Collection extends Iterable {} 它是一个接口,是高度抽象出来的集合,它包含了集合的基本操作:添加、删除、清空、遍历(读取)、是否为空、获取大小、是否保护某元素等等。

Collection接口的所有子类(直接子类和间接子类)都必须实现2种构造函数:不带参数的构造函数 和 参数为Collection的构造函数。带参数的构造函数,可以用来转换Collection的类型。

Java 集合系列02之 Collection架构 // Collection的API abstract boolean add(E object) abstract boolean addAll(Collection<? extends E> collection) abstract void clear() abstract boolean contains(Object object) abstract boolean containsAll(Collection<?> collection) abstract boolean equals(Object object) abstract int hashCode() abstract boolean isEmpty() abstract Iterator iterator() abstract boolean remove(Object object) abstract boolean removeAll(Collection<?> collection) abstract boolean retainAll(Collection<?> collection) abstract int size() abstract T[] toArray(T[] array) abstract Object[] toArray() Java 集合系列02之 Collection架构 2 List简介

List的定义如下:

public interface List extends Collection {} List是一个继承于Collection的接口,即List是集合中的一种。List是有序的队列,List中的每一个元素都有一个索引;第一个元素的索引值是0,往后的元素的索引值依次+1。和Set不同,List中允许有重复的元素。

List的官方介绍如下:

A List is a collection which maintains an ordering for its elements. Every element in the List has an index. Each element can thus be accessed by its index, with the first index being zero. Normally, Lists allow duplicate elements, as compared to Sets, where elements have to be unique. 关于API方面。既然List是继承于Collection接口,它自然就包含了Collection中的全部函数接口;由于List是有序队列,它也额外的有自己的API接口。主要有“添加、删除、获取、修改指定位置的元素”、“获取List中的子队列”等。

Java 集合系列02之 Collection架构 // Collection的API abstract boolean add(E object) abstract boolean addAll(Collection<? extends E> collection) abstract void clear() abstract boolean contains(Object object) abstract boolean containsAll(Collection<?> collection) abstract boolean equals(Object object) abstract int hashCode() abstract boolean isEmpty() abstract Iterator iterator() abstract boolean remove(Object object) abstract boolean removeAll(Collection<?> collection) abstract boolean retainAll(Collection<?> collection) abstract int size() abstract T[] toArray(T[] array) abstract Object[] toArray() // 相比与Collection,List新增的API: abstract void add(int location, E object) abstract boolean addAll(int location, Collection<? extends E> collection) abstract E get(int location) abstract int indexOf(Object object) abstract int lastIndexOf(Object object) abstract ListIterator listIterator(int location) abstract ListIterator listIterator() abstract E remove(int location) abstract E set(int location, E object) abstract List subList(int start, int end) Java 集合系列02之 Collection架构 3 Set简介

Set的定义如下:

public interface Set extends Collection {} Set是一个继承于Collection的接口,即Set也是集合中的一种。Set是没有重复元素的集合。

关于API方面。Set的API和Collection完全一样。

Java 集合系列02之 Collection架构 // Set的API abstract boolean add(E object) abstract boolean addAll(Collection<? extends E> collection) abstract void clear() abstract boolean contains(Object object) abstract boolean containsAll(Collection<?> collection) abstract boolean equals(Object object) abstract int hashCode() abstract boolean isEmpty() abstract Iterator iterator() abstract boolean remove(Object object) abstract boolean removeAll(Collection<?> collection) abstract boolean retainAll(Collection<?> collection) abstract int size() abstract T[] toArray(T[] array) abstract Object[] toArray() Java 集合系列02之 Collection架构 4 AbstractCollection

AbstractCollection的定义如下:

public abstract class AbstractCollection implements Collection {} AbstractCollection是一个抽象类,它实现了Collection中除iterator()和size()之外的函数。

AbstractCollection的主要作用:它实现了Collection接口中的大部分函数。从而方便其它类实现Collection,比如ArrayList、LinkedList等,它们这些类想要实现Collection接口,通过继承AbstractCollection就已经实现了大部分的接口了。

5 AbstractList

AbstractList的定义如下:

public abstract class AbstractList extends AbstractCollection implements List {} AbstractList是一个继承于AbstractCollection,并且实现List接口的抽象类。它实现了List中除size()、get(int location)之外的函数。

AbstractList的主要作用:它实现了List接口中的大部分函数。从而方便其它类继承List。

另外,和AbstractCollection相比,AbstractList抽象类中,实现了iterator()接口。

6 AbstractSet

AbstractSet的定义如下:

public abstract class AbstractSet extends AbstractCollection implements Set {} AbstractSet是一个继承于AbstractCollection,并且实现Set接口的抽象类。由于Set接口和Collection接口中的API完全一样,Set也就没有自己单独的API。和AbstractCollection一样,它实现了List中除iterator()和size()之外的函数。

AbstractSet的主要作用:它实现了Set接口中的大部分函数。从而方便其它类实现Set接口。

7 Iterator

Iterator的定义如下:

public interface Iterator {} Iterator是一个接口,它是集合的迭代器。集合可以通过Iterator去遍历集合中的元素。Iterator提供的API接口,包括:是否存在下一个元素、获取下一个元素、删除当前元素。

注意:Iterator遍历Collection时,是fail-fast机制的。即,当某一个线程A通过iterator去遍历某集合的过程中,若该集合的内容被其他线程所改变了;那么线程A访问集合时,就会抛出ConcurrentModificationException异常,产生fail-fast事件。关于fail-fast的详细内容,我们会在后面专门进行说明。TODO

// Iterator的API abstract boolean hasNext() abstract E next() abstract void remove() 8 ListIterator

ListIterator的定义如下:

public interface ListIterator extends Iterator {} ListIterator是一个继承于Iterator的接口,它是队列迭代器。专门用于便利List,能提供向前/向后遍历。相比于Iterator,它新增了添加、是否存在上一个元素、获取上一个元素等等API接口。

Java 集合系列02之 Collection架构 // ListIterator的API // 继承于Iterator的接口 abstract boolean hasNext() abstract E next() abstract void remove() // 新增API接口 abstract void add(E object) abstract boolean hasPrevious() abstract int nextIndex() abstract E previous() abstract int previousIndex() abstract void set(E object)

Java 集合系列02之 Collection架构相关推荐

  1. Java 集合系列目录(Category)

    Java 集合系列目录(Category) 转自:Java 集合系列目录(Category) 01. Java 集合系列01之 总体框架 02. Java 集合系列02之 Collection架构 0 ...

  2. 新手菜鸟 Java 集合系列目录(Category)

    Java 集合系列01之 总体框架 http://www.cnblogs.com/skywang12345/p/3308498.html (笔记:Java集合是java提供的工具包,包含了常用的数据结 ...

  3. Java 集合系列 16 HashSet

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  4. Java 集合系列06: Vector深入解析

    戳上面的蓝字关注我们哦! 精彩内容 精选java等全套视频教程 精选java电子图书 大数据视频教程精选 java项目练习精选 概论 这是接着以前的文章分享的,这里给出以前的文章的连接,供小伙伴们回顾 ...

  5. Java 集合系列04之 fail-fast总结

    转载自   Java 集合系列04之 fail-fast总结 概要 前面,我们已经学习了ArrayList.接下来,我们以ArrayList为例,对Iterator的fail-fast机制进行了解.内 ...

  6. Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例

    转载自  Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例 第1部分 ArrayList介绍 ArrayList简介 ArrayList 是一个数组队列,相当于 动态数组.与 ...

  7. java集合系列——java集合概述(一)

    在JDK中集合是很重要的,学习java那么一定要好好的去了解一下集合的源码以及一些集合实现的思想! 一:集合的UML类图(网上下载的图片) Java集合工具包位置是java.util.* 二:集合工具 ...

  8. Java 集合系列(一)

    Java集合系列文章将以思维导图为主要形式来展示知识点,让零碎的知识形成体系. 这篇文章主要介绍的是[Java 集合的基本知识],即Java 集合简介. 毕业出来一直使用 PHP 进行开发,对于大学所 ...

  9. 深入Java集合系列之五:PriorityQueue

    转载自  深入Java集合系列之五:PriorityQueue 前言 今天继续来分析一下PriorityQueue的源码实现,实际上在Java集合框架中,还有ArrayDeque(一种双端队列),这里 ...

最新文章

  1. 从认知学到进化论,详述强化学习两大最新突破
  2. Centos7下安装部署oracle数据库方法及问题汇总
  3. linux 手动释放内存
  4. 【深度学习】图像特征提取与通道数问题(基于U型网络)
  5. mysql系列之2.mysql多实例
  6. 经典回溯之火柴拼正方形
  7. HTML作业-保护环境-保护地球
  8. 谷歌 NAS + 目标检测 新作:SpineNet
  9. linux操作系统源码分析,linux操作系统源代码详细分析.doc
  10. 【白皮书分享】2020-2021年运营从业者薪资及职业现状调查白皮书.pdf(附下载链接)...
  11. 《迎向开阔的人生》——刘墉
  12. python win32api.sendmessage_Python win32api sendmasg
  13. win10运行python文件_Python如何运行py文件?
  14. 建筑师学python有用吗_建筑师为什么要学编程?
  15. 安装Aras Innovator12 sp9全过程
  16. unity3d的Animation 动画播放器的基本API
  17. 安卓手机如何更改开机 关机 动画
  18. 国企计算机技术岗都干什么,大家听说的国企技术岗都是什么样子的?
  19. CodeForces - 1646E Power Board (思维,数学)
  20. 南宁城市建设发展市政工程人才需求暴涨

热门文章

  1. 大厂面试通关图鉴:骚话走一走,百万薪到手!
  2. Python 入门你要懂哪些?这篇文章总算讲清楚了
  3. 融资 2000 万美元后,他竟将核心代码全开源,这……能行吗?
  4. 二、配置QtDesigner、PyUIC及PyRcc
  5. MIT黑科技:“不开卷也有益”,计算机不翻书就能读完一本书
  6. [UWP]在应用开发中安全使用文件资源
  7. Java 基础 之 常量
  8. python操作Mysql基础
  9. Jquery绑定事件(bind和live的区别)[转]
  10. Android 分享机顶盒项目的封装类《GridView》