首页
学习
活动
专区
圈层
工具
发布

HashMap HashTable ConcurrentMap 中key value是否可以为null

HashMap HashTable ConcurrentMap 中key value是否可以为null先说结论hashmap的key,value都可以为null;当key重复时,第二个key的value....put(null,"111");hashMap2.put(null,null);System.out.println(hashMap2);结论:hashmap的key,value都可以为null;当key...重复时,第二个key的value会覆盖第一个key的value原理put方法get方法返回的是null,此时null值不知道是未找到还是对应的value值。...这就出现了一个问题:当A线程使用containsKey()进行判断时,发现有这个元素,当他调用get()取这个元素时,B线程加入了进来,B线程将这个元素移除掉了,此时A线程取得的值为null,A线程会以为自己取到了这个值...,但实际上此时的null是未找到的null。

71410
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    异步编程 - 06 基于JDK中的Future实现异步编程(中)_CompletableFuture源码解析

    2)一个节点(CompletionStage)的计算执行可以被表述为一个函数、消费者、可执行的Runable(例如使用apply、accept、run方法), 具体取决于这个节点是否需要参数或者产生结果...future对象 return d; } 代码1判断行为是否为null,如果是则抛出异常。...get()处返回null。...当代码6的future任务结束后,看看其stack栈里面是否有依赖其结果的行为,如果有则从栈中弹出来,并执行。 其实上面代码中的runAsync实现可以用我们自己编写的简单代码来模拟。...,其get()方法有返回值,且返回值会被设置到future中,然后调用future的get()方法的线程就会获取到该值。

    39920

    null 不好,我推荐你使用 Optional

    如果我们不确定一个值是否为空,可以使用 Optional.ofNullable 方法,它会根据值是否为空,返回一个相应的 Optional 对象。...以下是一些常用的方法: isPresent():判断 Optional 对象是否包含一个非空的值,返回一个布尔值。...extends T> supplier):如果 Optional 对象包含一个非空的值,返回该值,否则返回由给定的供应者操作生成的值。 // 使用 orElseGet(Supplier可以利用 Stream 的各种操作来处理 Optional 的值,而不需要显式地判断是否为空。...它接受一个 Supplier 类型的 supplier,如果 Optional 对象包含一个非空的值,那么就返回这个 Optional 对象本身,如果 Optional 对象为空,那么就返回 supplier.get

    36930

    =null) 做非空判断?带你快速上手 Optional 实战性理解!

    ) 2.认识Optional并使用 简单来说,Opitonal类就是Java提供的为了解决大家平时判断对象是否为空用 会用 null!...2.2 Optional.get()方法(返回对象的值) get()方法是返回一个option的实例值 源码: public T get() { if (value == null) {....get()方法,如果非空则返回当前对象 源码: public T orElseGet(Supplier返回方法体中的对应参数,所以可以看出这三个方法体中参数是不一样的 orElse(T 对象) orElseGet(Supplier 对象) orElseThrow(异常) map(...,下面可以简单看一下我在实战中怎用使用神奇的Optional 3.实战场景再现 场景 在service层中查询一个对象,返回之后判断是否为空并做处理 //查询一个对象 Member member =

    8.6K20

    理解Java8里面CompletableFuture异步编程

    CompletableFuture在Java里面被用于异步编程,异步通常意味着非阻塞,可以使得我们的任务单独运行在与主线程分离的其他线程中,并且通过 回调可以在主线程中得到异步任务的执行状态,是否完成,...和是否异常等信息。...,还有get方法可以一直阻塞直到任务结束然后获取结果,但整体来说这种方式,还是同步的,因为需要客户端不断阻塞等待或者不断轮询才能知道任务是否完成。...(1)thenApply() 这个方法,其实用过函数式编程的人非常容易理解,类似于scala和spark的map算子,通过这个方法可以进行多次链式转化并返回最终的加工结果。...anyOf方法,也比较简单,意思就是只要在多个future里面有一个返回,整个任务就可以结束,而不需要等到每一个future结束。

    16.9K63

    JDK8已出这么久了,还是有很多人不会用Opitonal啊

    ()方法(返回对象的值) get()方法是返回一个option的实例值 源码: public T get() { if (value == null) { throw new NoSuchElementException...Supplier对象) 这个与orElse很相似,入参不一样,入参为Supplier对象,为空返回传入对象的.get()方法,如果非空则返回当前对象 源码: public T orElseGet...,如果为空,则返回方法体中的对应参数,所以可以看出这三个方法体中参数是不一样的 orElse(T 对象) orElseGet(Supplier 对象) orElseThrow(异常) map(...,下面可以简单看一下我在实战中怎用使用神奇的Optional 3、实战场景再现 场景1:在service层中 查询一个对象,返回之后判断是否为空并做处理 //查询一个对象 Member member...} //不要忘记抛出异常 throw new ServiceException("该终端不存在"); } 实战场景还有很多,包括return时可以判断是否返回当前值还是跳转到另一个方法体中

    1.1K30

    Java 是如何优雅地处理NPE问题的

    事实上,程序员可以忽略null类型,可以认为null仅仅是一个可以成为任何引用类型的特殊符号。...NPE 问题的解决 很多时候我们对数据是否存在有自己的期望,但是这种期望并不能直接被我们掌控,一个返回值为 null 所表达的意思并不明确过于模糊,往往通过是否判断为 null 来规避空指针问题。...Optional, 否则指定一个 Optional orElseGet(Supplier) 如果 Optional 的值存在,返回 Optional, 否则指定一个执行 Supplier 函数来获取值...extends Throwable>) 如果 Optional 的值存在,返回 Optional, 否则抛出一个指定 Supplier 函数提供的异常 4.3 Java 9 中的新 API or(Supplier...因为入参是不可控的,你无法保证入参中的 Optional 是否为 null。这恰恰违背了 Optional 的本意。

    2.4K22

    Optional

    Optional中包含一个可以为空的对象,应该在所有可能为空的地方都加上Optional作为返回值。强迫调用方自行判断是否为空。自己因为老是忘记判断是否为null而导致空指针。 2....Optional之前自己最习惯的用法是先判断是否是ifPresent,然后去进行下一步操作。看了代码之后,发现也可以通过orElse来设定默认值,或者是通过orElseThrow来抛出为空时的异常。...以下为查看源代码学习: Optional是一个包含了可能为空的对象的容器对象,如果值存在(isPresent()),可以利用get()获取到 ----------------------- 第一个对象:...value : other.get(); } 与上一个方法类似,但是传入的是实现了接口Supplier的 -----------------------------------------------...= null) { return value; } else { throw exceptionSupplier.get(); } } value为null抛出异常,否则返回value ---

    1K30
    领券