一、聚集是什么 ?
1. 聚集知识观点
前面我们学习过了,Java中的基本类型,任何单一的数据都可以用基本类型来表达,这些单一的基本类型被统一的组合或者治理起来的就是聚集,或者叫容器也可以。
举例:
我们用数据来示意一个学校的存在。首先我们先来剖析一波,学校的组成。
学校的组成 = 班级的聚集
班级 = 学生的聚集
前面我们说了,单一的数据类型都可以用基本类型来示意。那么我们用 String 类型来示意学生的名字。
A班一共有3个学生(小明,小红,小张)。那么小明等人就可以用基本类型来示意,而A班就可以用聚集来示意。 S学校一共有2个班级(A,B)。 由于A和B都是学生的聚集,以是A、B都是聚集。而S学校同样是A、B的聚集。
2. Java中的详细体现
聚集类存放于 java.util 包中
聚集类型主要有3种:list (列表)、set (集)、和 map (映射)。
后面会详细解说
list 聚集允许泛起重复的元素Set 聚集中元素不能是重复的map 是一个特殊聚集容器,是有key-value组成的,我们也可以叫字典。由于它跟字典一样,可以凭据key,来找到对应的数据value。
二、用伪代码构建一个学校
伪代码展示
1. 界说A班级学生
2. 界说A班级并添加学生
3. 界说B班级学生
4. 界说B班级并添加学生
5. 界说学校并添加AB两个班级
三、聚集实现类及常用API ?
Java 聚集框架主要包罗两种类型的容器,一种是聚集(Collection),存储一个元素聚集,另一种是Map,存储键/值对映射。
1. Collection
Collection 接口又有 3 种子类型,List、Set 和 Queue。其中List和Set是最长用的。Queue相对来说用的比较少,作为入门基本学习前两个已经够用了。
由于List和Set都是实现自Collection,以是List和Set的API是一样的,只要初学者记着Collection的常用方式和List和Set各个实现类的特点即可掌握。
List 和 Set 区别
List实现类特点
Set实现类特点
Collection常用API
总结
平安的不高效,高效的不平安。要凭据使用环境确定使用哪一个。
一样平常开发中List基本都是 ArrayList,而 Set 使用 HashSet。
2. Map
Map是一种特殊的聚集容器,它的数据结构是key-value的形式,类似于字典。Map的主要作用就是作为字典使用,通过key来查询value好比上面的例子,就可以凭据学生的名字,来找到学生详细所在的班级,我们对Map的学习主要学习其各个实现类的特点和常用API即可
实现类特点
Map聚集常用API
四、 Java聚集进阶知识点
1.Map高级
这里所说的高级,基本就是面试时刻,面试官会经常考的知识点。
①线程平安
②哈希碰撞
③加载因子
④为什么ConcurrentHashMap效率高并平安
① 线程平安
HashTable 是线程平安的,由于它的所有方式都被 synchronized修饰,以是平安,然则效率相对是低于 HashMap 的。 HashMap 虽然是线程不平安然则效率比较高。小编建议若是在不涉及多线程操作的情形下,建议使用HashMap。 那么什么情形是不涉及多线程呢? 最简朴的场景就是在只需要在方式中使用的时刻可以用HashMap。然则凡事要作为工具的实例变量的情形下,一定就不能使用HashMap。由于它线程不平安。建议使用ConcurrentHashMap
②哈希碰撞
什么是哈希碰撞,前面说了凡事Hash开头的Map实现类,底层都是使用Hash来实现的,即将Key通过hash算法获得一个位置,然后在该位置上存储value。然则若是key1和key2通过算法获得的位置是一样的,即说明泛起了hash碰撞的场景。那么若何制止哈希膨胀呢? 谜底就是扩容,默认当HashMap中的键值对到达数组巨细的75%时,即会触发扩容。通过扩容的方式来制止哈希碰撞
③加载因子
前面说哈希碰撞时刻,解决方案就是扩容,那么若何知道要扩容呢? 默认当Hash到达75%时刻就扩容,这个75%就叫做加载因子。
④为什么ConcurrentHashMap效率高并平安
Hashtable的synchronized是针对整张Hash表的,即每次锁住整张表让线程独占,ConcurrentHashMap允许多个修改操作并发举行,其关键在于使用了锁星散手艺。通过把整个Map分为N个Segment,可以提供相同的线程平安,然则效率提升N倍,默认提升16倍。(读操作不加锁,由于HashEntry的value变量是 volatile的,也能保证读取到最新的值。)
面试时刻可以简朴回覆: 每一个Segment相当于HashTable,若是Map分成了N个分段,一样平常情形若是并发的数目小于N都不会泛起锁阻断情形,然则当并发数大于N时刻,同样会有性能为题,ConcurrentHashMap相当于HashTable和HashMap的一个这种方案。
五、哪些场景需要使用到聚集 ?
作为初学者,往往不知道学习的这些器械,到底有什么用处。在此小编简朴形貌下。
1. 需要批量操作使用List
2. Map作为字典使用
凭据Map的key和value的数据结构,可以将key设置成查询条件,然后找到对应的value。