map的put和putIfAbsent区别

目录

1、putIfAbsent源码

2、putIfAbsent和put的区别

3、案例

1、putIfAbsent源码

default V putIfAbsent(K key, V value) {
        V v = get(key);
        if (v == null) {
            v = put(key, value);
        }
 
        return v;
    }

意思就是:putIfAbsent   如果传入key对应的value已经存在,就返回存在的value,不进行替换。如果不存在,就添加key和value,返回null

2、putIfAbsent和put的区别

put不管什么直接存入,返回旧值,putIfAbsent如果为null才存入,返回旧值。

注意:旧值是指:当value存在时该value就是旧值,value不存在时null就是旧值。

3、案例

说明:处理重复数据与不重复数据,以重复数据为唯一,合并数据

直接实例:一个班级列表   list<class>  classes,一个班级对象实体类class,里面是list<student> students列表

public class TestPutIfAbsertn {

    public static void main(String[] args) {
        List<ClassStu> dataes = Lists.newArrayList();
        //学生/班级
        dataes.add(new ClassStu(new Student(" 张三"),1));
        dataes.add(new ClassStu(new Student(" 李四"),2));
        dataes.add(new ClassStu(new Student(" 王五"),1));
        dataes.add(new ClassStu(new Student(" 赵六"),2));
        dataes.add(new ClassStu(new Student(" 孙七"),1));
        dataes.add(new ClassStu(new Student(" 周八"),2));
        dataes.add(new ClassStu(new Student(" 吴九"),1));

        //一个班级列表list<class> classes,一个班级对象实体类class,里面是list<student> students列表
        Map<Integer,List<Student>> map = Maps.newHashMap();
        List<Student> student;
        for (ClassStu classStu : dataes){
            student = map.putIfAbsent(classStu.getClasses(),new ArrayList<Student>(dataes.size()));
            if(null == student){
                student = map.get(classStu.getClasses());
            }
            Student stu = new Student(classStu.getStudent().getName());
            student.add(stu);
        }

        for(Map.Entry<Integer,List<Student>> m:map.entrySet()){
            Integer i = m.getKey();
            List<Student> stu = m.getValue();
            System.out.print(i);
            System.out.print("--");
            System.out.println(stu);
            System.out.println();
        }
    }
}
@AllArgsConstructor
@Data
public class ClassStu {
    Student student;
    int classes;
}

@Data
@AllArgsConstructor
public class Student {
    private String name;
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值