java聚集是什么_菜鸟程序员都能听得明白Java聚集先容,快来珍藏

3c10e467cf8330b7e82f26c45f50b8a0.png

一、聚集是什么 ?

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。

二、用伪代码构建一个学校

伪代码展示

d701ceb2bc345a4ae72f076aa72b8c53.png

1. 界说A班级学生

e5ee5a72214d3c987949bd04f13466b3.png

2. 界说A班级并添加学生

b6a17022f41bfe4ba1492fcbb07f5ad8.png

3. 界说B班级学生

82458c86a48996dc8cd7be9913d31869.png

4. 界说B班级并添加学生

ad26678992f42932ff2c4e0c96332fbf.png

5. 界说学校并添加AB两个班级

37954ebd4ea6a483bd9e458af5344d4f.png

三、聚集实现类及常用API ?

Java 聚集框架主要包罗两种类型的容器,一种是聚集(Collection),存储一个元素聚集,另一种是Map,存储键/值对映射。

5e010012d11c8074246a7e8f011f0386.png

1. Collection

Collection 接口又有 3 种子类型,List、Set 和 Queue。其中List和Set是最长用的。Queue相对来说用的比较少,作为入门基本学习前两个已经够用了。

由于List和Set都是实现自Collection,以是List和Set的API是一样的,只要初学者记着Collection的常用方式和List和Set各个实现类的特点即可掌握。

List 和 Set 区别

d988067fcc9d125a1cd4d82ac2663eb9.png

List实现类特点

66d82a87beb94fe61e2340efd2572406.png

Set实现类特点

7eb5702ed75a14662c71d5febe7bca36.png

Collection常用API

520922ed56edf6b68b2363711a49d5fd.png

总结

平安的不高效,高效的不平安。要凭据使用环境确定使用哪一个。

一样平常开发中List基本都是 ArrayList,而 Set 使用 HashSet。

2. Map

4359e7efc199f7af7439a81e9de1af9e.png

Map是一种特殊的聚集容器,它的数据结构是key-value的形式,类似于字典。Map的主要作用就是作为字典使用,通过key来查询value好比上面的例子,就可以凭据学生的名字,来找到学生详细所在的班级,我们对Map的学习主要学习其各个实现类的特点和常用API即可

59f602dd0d81eece275f2f1d0273a6a0.png

实现类特点

66ca73afb3c9fde9166b6066dc2362fb.png

Map聚集常用API

47a3516b8911a5393243495244b315b5.png

四、 Java聚集进阶知识点

1.Map高级

这里所说的高级,基本就是面试时刻,面试官会经常考的知识点。

①线程平安

②哈希碰撞

③加载因子

④为什么ConcurrentHashMap效率高并平安

① 线程平安

HashTable 是线程平安的,由于它的所有方式都被 synchronized修饰,以是平安,然则效率相对是低于 HashMap 的。 HashMap 虽然是线程不平安然则效率比较高。小编建议若是在不涉及多线程操作的情形下,建议使用HashMap。 那么什么情形是不涉及多线程呢? 最简朴的场景就是在只需要在方式中使用的时刻可以用HashMap。然则凡事要作为工具的实例变量的情形下,一定就不能使用HashMap。由于它线程不平安。建议使用ConcurrentHashMap

②哈希碰撞

什么是哈希碰撞,前面说了凡事Hash开头的Map实现类,底层都是使用Hash来实现的,即将Key通过hash算法获得一个位置,然后在该位置上存储value。然则若是key1和key2通过算法获得的位置是一样的,即说明泛起了hash碰撞的场景。那么若何制止哈希膨胀呢? 谜底就是扩容,默认当HashMap中的键值对到达数组巨细的75%时,即会触发扩容。通过扩容的方式来制止哈希碰撞

③加载因子

d777beb77ec343cafc654ee3d05925ee.png

前面说哈希碰撞时刻,解决方案就是扩容,那么若何知道要扩容呢? 默认当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

915a5f7aef3e1bd7ba23613423402077.png

2. Map作为字典使用

凭据Map的key和value的数据结构,可以将key设置成查询条件,然后找到对应的value。

475384f6a14396f0a6e4efb433e293dc.png

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值