java集合举例_菜鸟程序员都能听得懂得Java集合介绍,快来收藏
一、集合是什么 ?
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集合介绍,快来收藏相关推荐
- 一般项目中哪里体现了数据结构_优秀程序员都应该学习的数据结构与算法项目(GitHub 开源清单)...
前言 算法为王. 想学好前端,先练好内功,内功不行,就算招式练的再花哨,终究成不了高手:只有内功深厚者,前端之路才会走得更远. 强烈推荐 GitHub 上值得前端学习的数据结构与算法项目,包含 gif ...
- 千万程序员都说完美,成为Java顶尖程序员 ,看这11本书就够了
成为Java顶尖程序员 ,看这11本书就够了 如下是我推荐给Java开发者们的一些值得一看的好书.可是这些书里面并无Java基础.Java教程之类的书,不是我不推荐,而是离我本身学习 Java基础技术 ...
- 菜鸟程序员都是怎样写代码的?你也可以学一手
每个程序员都要经历"菜鸡"这个阶段,那么,在菜鸡阶段,程序员是怎么写代码的呢?下面12大瞬间,能否找到你当初的影子? 1.命名不规范 可能不少程序员都会有这样的经历,写代码时灵光乍 ...
- 入党对程序员有什么用_为什么程序员都喜欢用两个大屏显示器?网友:一个复制一个粘贴...
如今的程序员似乎对办公电脑的配置要求非常高,连一些相对普通的配置都不入他们的"法眼"!都要比较先进的配置.不过想想也是,毕竟电脑是他们天天打交道的玩意.然而笔者却发现,程序员的办公 ...
- java static关键字_好程序员Java教程分享static关键字的理解
好程序员Java教程分享static关键字的理解,static关键字含义可以理解为静态的. 1. 当其修饰属性时,该属性为整个类公有,所有的对象操作的都是同一个静态属性.所以调用时应该使用类名去调用, ...
- java求婚代码_屌丝程序员的求婚道具--内含视频
身为程序员,求婚的方式,来点和程序相关的,是不是更有意思点呢? ###前言### 于是,从10月份,我就开始策划,要如何把这个求婚方案做完整了.我期望的求婚产生的效果如下: 浪漫 能提现我的技术本身又 ...
- 二叉树的字符图形显示程序_每个程序员都必须知道的8种通用数据结构
作者:IT-Evan https://www.cnblogs.com/IT-Evan/p/12444968.html 数据结构是一种特殊的组织和存储数据的方式,可以使我们可以更高效地对存储的数据执行操 ...
- 精确的数据访问冲突_每个程序员都必须知道的8种通用数据结构
快速介绍8种常用数据结构 数据结构是一种特殊的组织和存储数据的方式,可以使我们可以更高效地对存储的数据执行操作. 数据结构在计算机科学和软件工程领域具有广泛而多样的用途. 几乎所有已开发的程序或软件系 ...
- java属于编译_《程序员修炼之道》-读书笔记一-Java到底属于编译型语言还是解释型语言?...
Java到底属于编译型语言还是解释型语言? 要想知道Java属于编译型语言还是解释型语言我们需要知道他们的定义和区别 定义: 编译型语言:把做好的源程序全部编译成二进制代码的可运行程序.然后,可直接运 ...
最新文章
- 【spring】spring基于xml的声明式事务控制
- noip2018——题解总结
- 使用GDI+实现圆形进度条控件的平滑效果
- 用私有构造器或者枚举类型强化Singleton 属性
- Windows GDI和GDI+编程实例剖析(1)
- UVALive 6884 GREAT + SWERC = PORTO dfs模拟
- 电脑 Google浏览器 截长屏 无任何辅助软件
- Android基础:Android布局
- Windows安装Oracle与PlSql教程
- GIS-坐标系-EPSG(二次整理)
- Skiplist(跳表)的简单介绍与C++实现
- 飞信机器人 ld-linux.so.2,飞信机器人安装
- KMPlayer播放mkv视频不出声音的解决办法
- 基于CNN卷积神经网络实现手势识别
- 如何防止U盘病毒入侵方法
- 苹果笔记本开不了机的解决措施有哪些
- windows server 2008r2 更新失败解决方案
- 浅谈因子分析(Factor Analysis)
- 鸿蒙系统怎么没有微信界面,如果鸿蒙系统没有微信,你会选择用吗?
- 现货白银分析离不开SLV持仓分析