Java 集合系列0、概述
概述:

Collection 框架中 从最上层的核心主干可以看到:
Iterator、Collection、Map 三个接口(拓展思考1)
1、Collection 接口:主要包括了集合中的一些常用操作,类似于CRUD 等,在JDK 1.8 之后,提供了stream 与 parallerStream 两个抽象方法,用于将集合转换成流。
主要分支:
A:List 是一个有序的队列,每一个元素都有他的索引。
实现类:ArrayList、LinkedList、Vector
B:Set 是一个不允许有重复元素的集合
实现类:TreeSet、Hashset。底层实现分别依靠了 TreeMap 以及 HashMap。
2、Map 接口:核心思想为基于 key -value 的存储方式进行数据存储。AbstractMap 实现了Map 接口,并且实现了大部分的操作。而HashMap,TreeMap,linkHashMap 等都继承了AbstractMap 同时实现了Map 接口。
3、Iterator 接口:用于遍历集合,也称为Iterator 迭代器。Collection 实现了Iterator 接口,通过iterator()方法返回迭代器。
拓展思考1:为什么是接口,而不是抽象类呢?
因为这三个接口主要是定义了集合中一些基本操作,在抽象类与接口中的本质区别中,我们可以理解 抽象类主要是用于定义一个东西是什么,而接口则用于定义他能做什么。但是由于他们还没有没有明确定义他们是什么,只是说明了主要有这一些操作,因此是用的是接口。
拓展思考2:为什么HashMap 继承了AbstractMap 还要实现Map 接口?(Collection 类也有类似情况)
1、http://stackoverflow.com/questions/2165204/why-does-linkedhashsete-extend-hashsete-and-implement-sete
得票最高的答案的回答者说他问了当初写这段代码的 Josh Bloch,得知这就是一个写法错误。
2、Class类的getInterfaces 可以获取到实现的接口,却不能获取到父类实现接口,但是这种操作无意义。
Collection 概述:

Collection 框架中 主要提供了三种数据结构:
1、List(有序队列,有序,允许值重复)
2、Set(数学概念中的集合,不允许值重复,底层实现依赖于 Map 的具体实现)
3、Queue(队列,每一个元素都是一个节点,在线程池中有使用)

为了后续便于操作,AbstractCollection 中实现了大部分的Collection 操纵,Collection中有一个iterator()函数,它的作用是返回一个Iterator接口。通常,我们通过Iterator迭代器来遍历集合。ListIterator是List接口所特有的,在List接口中,通过ListIterator()返回一个ListIterator对象。
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.
1、List(Since JDK 1.0 )
List是一个继承于Collection的接口,即List是集合中的一种。List是有序的队列,List中的每一个元素都有一个索引;第一个元素的索引值是0,往后的元素的索引值依次+1。
AbstractList 中完成了 List 的少部分动作,主要通过获取迭代器来进行操作,例如 indexOf(),lastIndexOf(),contains()等操作,在内部实现了Iterator 具体实现类Itr。
List 的主要实现有:ArrayList、LinkList以及Vector;在Concurrent 包下的实现 CopyOnWriteArrayList。
在Collection 的基础上,List 接口拓展了以下方法:
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<E> listIterator(int location)
abstract ListIterator<E> listIterator()
abstract E remove(int location)
abstract E set(int location, E object)
abstract List<E> subList(int start, int end)
2、Set(Since JDK 1.0 )
Set 是一个没有重复元素的集合,他的实现依赖于Map进行相关操作。
AbstractSet 中并没有实现Collection 的操作,主要原因在于,Set 的底层数据接口依赖于具体的Map 进行实现。
Set 的主要实现:HashSet(依赖于HashMap),TreeSet(依赖于NavigableMap);Concurrent 包下实现了 CopyOnWriteSet(依赖于 CopyOnWriteArrayList)。
3、Queue(Since JDK 1.5 )
Queue 接口是在JDK 1.5后发行的,底层数据结构是(FIFO)。在消费者生产者,或者其他中间件,线程池中都有广泛的使用。
Queue 的实现主要有:阻塞队列,非阻塞队列以及双端队列。Concurrent 包中的实现,ConcurrentLinkedQueue。
Queue 在Collection 基础上添加的方法:
add 增加一个元索 如果队列已满,则抛出一个IIIegaISlabEepeplian异常
remove 移除并返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常
element 返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常
offer 添加一个元素并返回true 如果队列已满,则返回false
poll 移除并返问队列头部的元素 如果队列为空,则返回null
peek 返回队列头部的元素 如果队列为空,则返回null
put 添加一个元素 如果队列满,则阻塞
take 移除并返回队列头部的元素 如果队列为空,则阻塞
Iterator (Since JDK 1.5 )
迭代器,主要用于遍历集合,接口中并没有定义具体实现,基于集合的数据结构而进行具体实现。
List 中的迭代器:ListIteraor
Set 中的迭代器:HashSet 调用的是 HashMap 中的KeySet()iterator。
Queue 中的迭代器:使用的是内部实现的 Itr 类。
拓展思考1、Set 中的toArray() 方法?
在Set 接口以及 HashSet、TreeSet 等方法中,并没有重写ToArray()方法,默认调用的是AbstractCollection 中的实现。
Java 集合系列0、概述的更多相关文章
- Java 集合系列之一:JCF集合框架概述
容器,就是可以容纳其他Java对象的对象.Java Collections Framework(JCF)为Java开发者提供了通用的容器 java集合主要划分为四个部分: Collection(Lis ...
- Java 集合系列 17 TreeSet
java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...
- Java 集合系列 16 HashSet
java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...
- Java 集合系列 15 Map总结
java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...
- Java 集合系列 14 hashCode
java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...
- Java 集合系列 13 WeakHashMap
java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...
- java集合系列——List集合之ArrayList介绍(二)
一:List概述 List是 java.util包下面的类,从<a href="http://blog.csdn.net/u010648555/article/details/5604 ...
- Java 集合系列04之 fail-fast总结(通过ArrayList来说明fail-fast的原理、解决办法)
概要 前面,我们已经学习了ArrayList.接下来,我们以ArrayList为例,对Iterator的fail-fast机制进行了解.内容包括::1 fail-fast简介2 fail-fast示例 ...
- Java 集合系列05之 LinkedList详细介绍(源码解析)和使用示例
概要 前面,我们已经学习了ArrayList,并了解了fail-fast机制.这一章我们接着学习List的实现类——LinkedList.和学习ArrayList一样,接下来呢,我们先对Linked ...
随机推荐
- mysql 免安装版 启动服务马上关闭
在my.ini 加入这一句 1.直接在后面加上一下的参数 [mysqld] port=3306 basedir=D:\mysql-5.7.17-win32 datadir=D:\mysql-5.7.1 ...
- Centos7下Zabbix3.4至Zabbix4.0的升级步骤
点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 Centos7下Zabbix3.4至Zabbix4.0的升级步骤 查看现在centos版本和zab ...
- uoj【UNR #3】To Do Tree 【贪心】
题目链接 uojUNR3B 题解 如果不输出方案,是有一个经典的三分做法的 但是要输出方案也是可以贪心的 设\(d[i]\)为\(i\)节点到最深的儿子的距离 贪心选择\(d[i]\)大的即可 #in ...
- luogu4269 Snow Boots G (并查集)
对于某个靴子,如果0代表某个格能走,1代表不能走,那么只要连续的1的个数的最大值>=靴子的步长,那这个靴子就不能用. 那么只要对靴子和格子都按深度排个序,然后从大到小来扫一遍(靴子越来越浅,能走 ...
- Python--Django学习笔记1
Django:The Web framework for perfectionists with deadlines Django是一个Python语言开发的高级Web框架,采用MVC架构,通过配置可 ...
- CF815D Karen and Cards
CF815D Karen and Cards 固定一维c,然后(a,b)看成坐标,矩形区域求交 1.Segment tree Beats! 2.改成不合法的区域就是求并,c反向枚举,区域只增不减且完全 ...
- max,min,Zip函数(十一)
zip函数,拉链,传两个有序的参数,将他们一一对应为元祖形式 max,min比较默认比较一个元素,处理的是可迭代对象,相当于for循环取出每个元素进行比较,注意:不同类型之间不可比较 #!/usr/b ...
- FTP文件乱码和传输模式解释
转: FTP文件乱码和传输模式解释 2017年02月18日 10:50:03 -Hermes- 阅读数:12112更多 所属专栏: 异常解决方案急诊室 版权声明:大侠,在转载时请注明出处,小弟不胜 ...
- Simple Question
一.你会在时间序列数据集上使用什么交叉验证技术?是用k倍? 答:都不是.对于时间序列问题,k倍可能会很麻烦,因为第4年或第5年的一些模式有可能跟第3年的不同,而我们最终可能只是需要对过去几年的进行验证 ...
- Linux操作系统原理
Linux操作系统原理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.计算机经历的四个时代 1.第一代: 真空管计算机,输入和输出:穿孔卡片,对计算机操作起来非常不便,做一件事 ...