map的put和putIfAbsent使用
来源:互联网 发布:mac上看美剧的软件 编辑:程序博客网 时间:2024/05/21 09:39
直接上源码
default V putIfAbsent(K key, V value) { V v = get(key); if (v == null) { v = put(key, value); } return v; }
源码中传入key和value,根据key获取看是否存在value,如果value==null,然后调用put方法把传入的key和value put进map,返回根据key获取的老value
意思就是:putIfAbsent 如果传入key对应的value已经存在,就返回存在的value,不进行替换。如果不存在,就添加key和value,返回null
注意内部实现是调用的put,putIfAbsent和put的区别,put不管什么直接存入,返回旧值,putIfAbsent如果为null才存入,返回旧值。
下面列出一种我认为特别好的使用:处理重复数据与不重复数据,以重复数据为唯一,合并数据的方法。
直接实例:一个班级列表 list<class> classes,一个班级对象实体类class,里面是list<student> students列表
现在传入记录 list<data> datas
学生 班级
张三 1
李四 1
王五 2
赵六 1
孙七 2
周八 1
吴九 2
如何把上面这些记录保存进classes,即相同班级下面,是一个列表,2班 {王五,孙七,吴九}
Map<String, List<student>> map=new HashMap<String,List<student>>();List<student> students;for(data data:datas){students= map.putIfAbsent(data.getClass(),new ArrayList<student>(datas.size()));if (null == students) {students= map.get(data.getClass();)} student student = new student();student.setStudent(data.getStudent());students.add(student);}
主要看for循环内
第一次循环,map这个key没有保存,value为null,putIfAbsent所以保存获取的class返回null给students,接着为null根据key获取新建的学生列表集合,然后添加学生
第二次,遇到这个key里面存在数据,返回原来的list,所以不进if判断,继续添加新数据到这个list。
(注意:List<student> students;
与students = map.putIfAbsent(data.getClass(),new ArrayList<student>(datas.size()));
每次新建的时候students都指向新的,所以出现不同的班级的时候,这个学生list都是各个班级自己的list,然后添加本班学生就行了。)
保存后就是,将一个列表classes里面的每个class对象都保存着一个class属性,跟一个学生列表。就是把同一个班级的学生合并到了一起。
- map的put和putIfAbsent使用
- Map put和remove的 使用
- JAVASCRIPT使用map的put问题处理
- Map put 使用
- map的put理解
- ConcurrentHashMap的putIfAbsent方法
- Concurrenthashmap的putIfAbsent方法
- Java ConcurrentHashMap的putIfAbsent
- HashMap的putIfAbsent()方法
- Map put
- input、input()、put和put()的含义
- Map集合put方法的返回值
- 一滴水:关于Java容器类库概念及Map.put();方法的使用
- HTTP协议中PUT和POST使用上的区别
- HTTP协议中PUT和POST使用上的区别
- HTTP协议中PUT和POST使用上的区别
- HTTP协议中PUT和POST使用上的区别
- HTTP协议中PUT和POST使用上的区别
- Linux环境下arm嵌入式开发基础
- QT: 怎么运行release后的.exe文件
- python2.7对DICOM图像的读取
- 大数据相关技术系统介绍
- 一般处理程序多图片上传
- map的put和putIfAbsent使用
- 记一次由于断电造成虚拟机小红帽系统无法启动
- [LeetCode] 406. Queue Reconstruction by Height
- 集合位置
- 指定运行时动态库位置的三种方式
- 联网请求数据+更新ListView的UI——学习笔记
- 如何使Excel第一行保持不动,查看下面的行时,第一行始终显示在界面上?
- 研究 PHP opcode 是如何优化的
- AliOS开源