一、集合是什么 ?

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。

java集合举例_菜鸟程序员都能听得懂得Java集合介绍,快来收藏相关推荐

  1. 一般项目中哪里体现了数据结构_优秀程序员都应该学习的数据结构与算法项目(GitHub 开源清单)...

    前言 算法为王. 想学好前端,先练好内功,内功不行,就算招式练的再花哨,终究成不了高手:只有内功深厚者,前端之路才会走得更远. 强烈推荐 GitHub 上值得前端学习的数据结构与算法项目,包含 gif ...

  2. 千万程序员都说完美,成为Java顶尖程序员 ,看这11本书就够了

    成为Java顶尖程序员 ,看这11本书就够了 如下是我推荐给Java开发者们的一些值得一看的好书.可是这些书里面并无Java基础.Java教程之类的书,不是我不推荐,而是离我本身学习 Java基础技术 ...

  3. 菜鸟程序员都是怎样写代码的?你也可以学一手

    每个程序员都要经历"菜鸡"这个阶段,那么,在菜鸡阶段,程序员是怎么写代码的呢?下面12大瞬间,能否找到你当初的影子? 1.命名不规范 可能不少程序员都会有这样的经历,写代码时灵光乍 ...

  4. 入党对程序员有什么用_为什么程序员都喜欢用两个大屏显示器?网友:一个复制一个粘贴...

    如今的程序员似乎对办公电脑的配置要求非常高,连一些相对普通的配置都不入他们的"法眼"!都要比较先进的配置.不过想想也是,毕竟电脑是他们天天打交道的玩意.然而笔者却发现,程序员的办公 ...

  5. java static关键字_好程序员Java教程分享static关键字的理解

    好程序员Java教程分享static关键字的理解,static关键字含义可以理解为静态的. 1. 当其修饰属性时,该属性为整个类公有,所有的对象操作的都是同一个静态属性.所以调用时应该使用类名去调用, ...

  6. java求婚代码_屌丝程序员的求婚道具--内含视频

    身为程序员,求婚的方式,来点和程序相关的,是不是更有意思点呢? ###前言### 于是,从10月份,我就开始策划,要如何把这个求婚方案做完整了.我期望的求婚产生的效果如下: 浪漫 能提现我的技术本身又 ...

  7. 二叉树的字符图形显示程序_每个程序员都必须知道的8种通用数据结构

    作者:IT-Evan https://www.cnblogs.com/IT-Evan/p/12444968.html 数据结构是一种特殊的组织和存储数据的方式,可以使我们可以更高效地对存储的数据执行操 ...

  8. 精确的数据访问冲突_每个程序员都必须知道的8种通用数据结构

    快速介绍8种常用数据结构 数据结构是一种特殊的组织和存储数据的方式,可以使我们可以更高效地对存储的数据执行操作. 数据结构在计算机科学和软件工程领域具有广泛而多样的用途. 几乎所有已开发的程序或软件系 ...

  9. java属于编译_《程序员修炼之道》-读书笔记一-Java到底属于编译型语言还是解释型语言?...

    Java到底属于编译型语言还是解释型语言? 要想知道Java属于编译型语言还是解释型语言我们需要知道他们的定义和区别 定义: 编译型语言:把做好的源程序全部编译成二进制代码的可运行程序.然后,可直接运 ...

最新文章

  1. 【spring】spring基于xml的声明式事务控制
  2. noip2018——题解总结
  3. 使用GDI+实现圆形进度条控件的平滑效果
  4. 用私有构造器或者枚举类型强化Singleton 属性
  5. Windows GDI和GDI+编程实例剖析(1)
  6. UVALive 6884 GREAT + SWERC = PORTO dfs模拟
  7. 电脑 Google浏览器 截长屏 无任何辅助软件
  8. Android基础:Android布局
  9. Windows安装Oracle与PlSql教程
  10. GIS-坐标系-EPSG(二次整理)
  11. Skiplist(跳表)的简单介绍与C++实现
  12. 飞信机器人 ld-linux.so.2,飞信机器人安装
  13. KMPlayer播放mkv视频不出声音的解决办法
  14. 基于CNN卷积神经网络实现手势识别
  15. 如何防止U盘病毒入侵方法
  16. 苹果笔记本开不了机的解决措施有哪些
  17. windows server 2008r2 更新失败解决方案
  18. 浅谈因子分析(Factor Analysis)
  19. 鸿蒙系统怎么没有微信界面,如果鸿蒙系统没有微信,你会选择用吗?
  20. 现货白银分析离不开SLV持仓分析

热门文章

  1. Spring核心思想,IoC与DI详解(如果还不明白,放弃java吧)
  2. CSS篇一一简短介绍下CSS
  3. 【PERMUT】函数使用技巧
  4. Android实训-家庭财务管理系统
  5. 【matlab图像处理笔记5】【图像变换】(四)图像的正交变换
  6. ASP.NET 母版页小实例(点击显示文本内容)
  7. oracle子查询练习题与答案解析 笔记 小白练习!(内有福利)
  8. SSL weak ciphers 漏洞修复过程
  9. 企业承担社会责任的必要性
  10. JS - 自由变量与作用域链