public V putIfAbsent(@NotNull K key, 
@NotNull V value)

putIfAbsent方法主要是在向ConcurrentHashMap中添加键—值对的时候,它会先判断该键值对是否已经存在。

如果不存在(新的entry),那么会向map中添加该键值对,并返回null。 
如果已经存在,那么不会覆盖已有的值,直接返回已经存在的值。 
相当于:

 V v = map.get(key);
if (v == null)
v = map.put(key, value);
return v;

返回值: 
(1)如果是新的记录,那么会向map中添加该键值对,并返回null。 
(2)如果已经存在,那么不会覆盖已有的值,直接返回已经存在的值。

测试代码:

package com.tao.client;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; /**
* Created by michael on 17-7-13.
*/
public class Test { public static void main(String[] args) { //测试一下currentHashMap.putIfAbsent() Map<Long, String> clientMap = new ConcurrentHashMap<>(); System.out.println("首先打印空的clientMap");
System.out.println("clientMap: " + clientMap);
System.out.println(); //在空的clientMap中添加一个新的记录
System.out.println("在空的clientMap中添加一个新的记录");
System.out.println("添加之前的clientMap: " + clientMap);
long netId = 1234567L;
String str1 = "michael";
String result = clientMap.putIfAbsent(netId, str1);
System.out.println("添加之后的clientMap: " + clientMap);
System.out.println("查看返回值result: " + result);
System.out.println(); //重复添加
System.out.println("重复添加上一次的记录");
System.out.println("添加之前的clientMap: " + clientMap);
String result2 = clientMap.putIfAbsent(netId, str1);
System.out.println("添加之后的clientMap: " + clientMap);
System.out.println("查看返回值result: " + result2);
System.out.println(); }
}

输出结果: 

ConcurrentHashMap中的putIfAbsent方法的使用以及返回值的含义的更多相关文章

  1. 用mybatis中的insert方法插入数据,返回值为1,但数据库却没有数据

    刚才在写东西的时候,用mybatis中的 <insert id="add" parameterType="cn.entity.Computer"> ...

  2. ConcurrentHashmap中的size()方法简单解释

    本文所有的源码都是基于JDK1.8 ConcurrentHashmap中的size()方法源码: public int size() { long n = sumCount(); return ((n ...

  3. jquery中的ajax方法参数的用法和他的含义

    jquery中的ajax方法参数的用法和他的含义: 1.url:  要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type:  要求为String类型的参数,请求方式(pos ...

  4. Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?

    方法的重写Overriding和重载Overloading是Java多态性的不同表现.重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现.如 ...

  5. 方法的重写与重载的区别(Override与Overload)。重载的方法是否可以改变返回值的类型

    方法的重写(Override)与重载(Overload)的区别.重载的方法是否可以改变返回值的类型?[基础] 解释: 方法的重写overriding和重载Overloading是Java多态性的不同表 ...

  6. 接口作为方法的参数或返回值——List接口

    接口作为方法的参数或返回值,源码可知,List为一个接口,ArraryList是的它的实现类: 其中,addNames方法中,入参和返回值都List接口,入参是多态的,编译看左,运行看右(访问成员方法 ...

  7. Overloaded的方法是否可以改变返回值的类型

    摘要: 重载Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同) Overload是重载的意思,Override是覆盖的意思,也就是重写. 重载 ...

  8. Override和Overload差别,Overloaded的方法能否够改变返回值的类型?

    Overload是重载的意思, Override是覆盖的意思,也就是重写. 重载Overload表示同一个类中能够有多个名称同样的方法,但这些方法的參数列表各不同样(即參数个数或类型不同). 重写Ov ...

  9. Overload重載和Override重写的区别。Overloaded的方法是否可以改变返回值的类型?

    Overload是重载的意思,Override是覆盖的意思,也就是重写. 重载Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同). 重写Ove ...

随机推荐

  1. [PHP]算法-归并排序的PHP实现

    <?php //归并排序 function merge(&$A,$left,$mid,$right,$temp){ //7.左堆起始 $i=$left; //8.右堆起始 $j=$mid ...

  2. 学Java的18天,今天老师讲构造方法;

    上一篇讲到方法的调用和简单的构造方法,今天继续加深,加参数或者该参数: package sklx; public class Car{ //设三个属性 private String 品牌; priva ...

  3. 8.并发容器ConcurrentHashMap#put方法解析

    jdk1.7.0_79 HashMap可以说是每个Java程序员用的最多的数据结构之一了,无处不见它的身影.关于HashMap,通常也能说出它不是线程安全的.这篇文章要提到的是在多线程并发环境下的Ha ...

  4. MVC中使用JQuery方式进行异步请求和使用自带方式进行异步请求

    在MCV中使用异步请求可以很很高效地进行前台和后台的数据传递,在这里,笔者为初学者介绍两种在MVC中常用的异步请求处理方式. 在这里,我们通过在一个页面中放置一个按钮来异步获取当前服务器端的系统时间为 ...

  5. Django Rest Framework之解析器

    基本代码结构 urls.py: from django.conf.urls import url, include from web.views.s5_parser import TestView u ...

  6. inheritConstructorStealing.js

    // 借用构造函数 // 其基本思路是在子类型构造函数的内部调用父类型的构造函数 function Person(name){ this.name = name; this.friends = [&q ...

  7. deepin使用笔记-解决蓝牙设备开机自动开启的问题

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 1.安装蓝牙驱动管理 #apt-get install blueman 2.打开蓝牙驱动管理,关闭设备 3.关闭蓝牙开机启动服务 ...

  8. JS中使用document.defaultView.getComputedStyle()、currentStyle()方法获取CSS属性值

    在对网页进行调试的过程中,经常会用到js来获取元素的CSS样式,方法有很多很多,现在仅把我经常用的方法总结如: 1. obj.style:这个方法只能JS只能获取写在html标签中的写在style属性 ...

  9. 程序员简单打造一个灵活智能的自动化运维系统C#实例程序

    你是一个程序员,被派去管理公司500台计算机.这些机器可能需要执行一些自动化任务,一台台手动操作会把你累死.重复性的工作还是交给电脑处理,怎么解决这个问题呢?一个自动化的运维系统是必须的.自己实现的好 ...

  10. okhttp 的使用

    ①在OK HTTP 的GitHub上下载  jar 包 或者添加 grad'le依赖  OK HTTP 的地址 : https://github.com/square/okhttp ②导入jar包不想 ...