Java----集合梳理

集合是Java中一个很重要的组成部分。
先来看一张集合的图:
Java----集合梳理

一张图基本上集合的框架结构就清楚了。
后面,再针对这张图上面的结构一一分析:

1.常用的集合梳理

了解集合,最容易的办法就是了解Collection(注意区分Collections,collections是一个工具类)
Collection的接口
Java----集合梳理

Collection的实现子类
Java----集合梳理
Java----集合梳理
Java----集合梳理

2.常用的集合解释

虽然集合有很多很多,但是,我们在编程中并不是全部用上,大多数都是只有特殊时候才会用上。
下面列举一些常用的集合,进行分析:

名称 特点
map 键值对,key不可重复
list 有序,可重复,以元素安插顺序来放置元素,不会重新排列
set 无序,不可重复,使用内部排列机制
queue 先进先出

List系列

名称 特点
ArrayList 优先随机访问,数组实现,适合查询
LinkedList 适用于频繁的添加删除元素
Vector AbstractList的实现类,同步,线程更加安全
Steak 模拟栈的结构,先进后出

Set系列

名称 特点
HashSet 常用于存储重复*的集合,需要采用适当分配哈希码的方式来实现hashCode()方法(需重写hashcode和equals())
LinkedHashSet 扩展了HashSet,当需要跟踪插入的元素数据时,其迭代器按照元素的插入顺序来访问各个元素,提供了一个可访问各个元素的有序集合
TreeSet 常用于有序方式插入和抽取元素,故元素应该是可排序的元素
SortSet 保持元素的有序序列,必须实现Comparable

Map系列

名称 特点
HashMap 遍历速度慢,插入删除速度快,随机访问速度快,适合海量数据,o(1)的随机访问速度,不是可遍历
Hashtable 里面的方法几乎都是同步的,线程安全。Hashtable不允许存放null值(键和值都不可以),而HashMap可以
LinkedHashMap LinkedHashMap 实现与 HashMap 的不同之处在于,LinkedHashMap 维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序可以是插入顺序或者是访问顺序,该集合不是线程安全
TreeMap 使用了二叉权的数据结构,key是有序,保存其唯一性用到了hashCode()、equals()以及比较器(唯一性判断,键排序同TreeSet)

相对于集合的各种的方法,可以查看API,这个没什么好说的。

3.集合的一些小问题

3.1 ArrayList、Vector、LinkedList的区别

分类 ArrayList Vector LinkedList
方式 数数组方式存储数据,允许直接按序号索引元素 数组方式存储数据,允许直接按序号索引元素 双向链表实现存储
特点 索引数据快而插入数据慢 索引数据快而插入数据慢 索引慢,插入速度较快
安全 非线程安全 synchronized修饰,线程安全 非线程安全

3.2 Iterator接口的作用

collection实现了Iterator接口,而集合是collection的实现,所以集合实现了Iterator接口。

Iterator接口有hasNext(),next(),remove()三个方法,所以Iterator接口方法能以迭代方式逐个访问集合的各个元素,并且安全的从collection中去除适当的元素。

注意:
在Iterator进行删除操作会对底层的Collection带来影响,迭代器是快速修复,所以,当迭代器对数据进行迭代的时候有其他的线程修改底层集合,Iterator会抛出ConcurentModificationException,并且立即失败。

3.3 Comparable接口和Comparable接口

这两个接口是比较接口,对于String等内建类实现Comparable以提供一种排序方式,对于其余类,可实现Comparator来定义自己的比较方式。

分类 Comparable Comparable
适用于 有自然排序 不可自然排序或者不喜欢Comparable默认排序方式
使用 实现comparaTo() 自定义比较器

4.总结

集合就先说在这里,以后有新的会持续更新。

参考:
https://www.jianshu.com/p/ff69ec0fa1a5
Java API