首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

HashMap上的Java8 getOrDefault方法未按预期工作

HashMap是Java中的一个常用数据结构,它实现了Map接口,用于存储键值对。在Java 8中,HashMap新增了一个getOrDefault方法,用于获取指定键对应的值,如果键不存在,则返回默认值。

getOrDefault方法的定义如下:

代码语言:txt
复制
default V getOrDefault(Object key, V defaultValue)

该方法接受两个参数,第一个参数是要获取值的键,第二个参数是默认值。如果HashMap中存在指定键,则返回对应的值;如果不存在,则返回默认值。

这个方法的作用是简化代码,避免在获取值时需要进行判断键是否存在的操作。在某些场景下,我们可能需要在键不存在时返回一个默认值,而不是返回null。使用getOrDefault方法可以更加方便地实现这个需求。

HashMap的getOrDefault方法适用于各种场景,例如:

  1. 在统计字符出现次数时,可以使用HashMap来存储字符和对应的出现次数。当获取某个字符的出现次数时,可以使用getOrDefault方法,将默认值设置为0,这样即使字符不存在,也能返回正确的次数。
  2. 在处理用户输入时,可以使用HashMap来存储用户的选择和对应的处理逻辑。当根据用户选择获取对应的处理逻辑时,可以使用getOrDefault方法,将默认值设置为一个默认的处理逻辑,这样即使用户选择不存在,也能有一个默认的处理方式。

腾讯云提供了云计算相关的产品,其中包括云服务器、云数据库、云存储等。这些产品可以帮助开发者快速搭建和管理云计算环境,提供稳定可靠的基础设施支持。具体的产品介绍和链接地址可以在腾讯云官网上查找。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Map在Java 8中增加非常实用哪些函数接口?

方法签名为V getOrDefault(Object key, V defaultValue),作用是按照给定key查询Map中对应value,如果没有找到则返回defaultValue。...Map.getOrDefault() System.out.println(map.getOrDefault(4, "NoValue")); // 2 putIfAbsent() 该方法跟Lambda表达式没关系...,使用起来更加方便. remove() 我们都知道Map中有一个remove(Object key)方法,来根据指定key值删除Map中映射关系;Java8新增了remove(Object key,...V value)方法实现,该方法总是会用新值替换原来值.为了更精确控制替换行为,Java8在Map中加入了两个replace()方法,分别如下: replace(K key, V value),只有在当前...参数中BiFunction函数接口前面已经介绍过,里面有一个待实现方法R apply(T t, U u). merge()方法虽然语义有些复杂,但该方法用方式很明确,一个比较常见场景是将新错误信息拼接到原来信息

1.9K50

Lambda表达式你会用吗?

而计算则指数学意义计算,越是抽象计算,离计算机硬件越远。...首先回顾一下Java集合框架接口继承结构: ? 上图中绿色标注接口类,表示在Java8中加入了新接口方法,当然由于继承关系,他们相应子类也都会继承这些新方法。下表详细列举了这些方法。...Map.getOrDefault() System.out.println(map.getOrDefault(4, "NoValue")); // 2 putIfAbsent() 该方法跟Lambda表达式没关系...V value)方法实现,该方法总是会用新值替换原来值.为了更精确控制替换行为,Java8在Map中加入了两个replace()方法,分别如下: replace(K key, V value),只有在当前...参数中BiFunction函数接口前面已经介绍过,里面有一个待实现方法R apply(T t, U u). merge()方法虽然语义有些复杂,但该方法用方式很明确,一个比较常见场景是将新错误信息拼接到原来信息

87230

Java8新特性及使用(二)

扩展注解支持 Java 8扩展了注解上下文。现在几乎可以为任何东西添加注解:局部变量、泛型类、父类与接口实现,就连方法异常也能添加注解。...HashMap性能提升 Java8中,HashMap内部实现又引入了红黑树,使得HashMap总体性能相较于Java7有比较明显提升。以下是对Hash均匀和不均匀情况下性能对比 (1)....Hash较均匀情况 (2). Hash极不均匀情况 4. IO/NIO 改进 Java8 对IO/NIO也做了一些改进。...String.getBytes()方法性能;还增加了一些新IO/NIO方法,使用这些方法可以从文件或者输入流中获取流(java.util.stream.Stream),通过对流操作,可以简化文本行处理...JavaScript引擎Nashorn Java 8提供了一个新Nashorn javascript引擎,它允许我们在JVM运行特定javascript应用。

64530

这是我见过最详细HashMap源码解析

所以在Java8中,HashMap结构实现变为数组+链表+红黑树 可以看出,HashMap底层就是一个数组结构 数组中每一项又是一个链表 当新建一个HashMap时,就会初始化一个数组. 3...在Java8中,HashMap中keyHash值由Hash(key)方法计得 HashMap中存储数据tableindex是由keyHash值决定....此结构是Java8新加 4.4 hash方法 Java 8中散列值优化函数 只做一次16位右位移异或 key.hashCode()函数调用是key键值类型自带哈希函数,返回int型散列值...,并没有初始化table,table初始化工作是在put方法中进行. 4.6 resize 扩容(resize)就是重新计算容量,向HashMap对象里不停添加元素,内部数组无法装载更多元素时...getOrDefault() 方法获取指定 key 对应对 value,如果找不到 key ,则返回设置默认值。

1.1K41

Java都21啦,8map你用熟悉了吗

感慨之余又想到这句,“你发任你发,我用 Java8” ,想了下,先来整理下 Java8HashMap 新增一些方法,看看自己平时工作中有用到多少~ Map 接口一览这里 小羊 特意查看了下 1.7...最后就一个常见 lambda 表达式了,重写了 Comparator 中 compare 方法最后读读这个方法注释确认下可以通过 stream 来使用 comparingByKey 进行排序。...(v); 这两句。...containsKey(key))) { return false; } remove(key); return true;}这里在原有 remove 方法基础,多增加了一层判断...可以看到注释中有常规做法 replace这两个也很简单,在 基础条件:有这个 key 基础,再多加一个条件,或者不加条件。和 remove 方法近似。

17420

Java集合框架知识整理

但Spliterator还可以用于估计其中保存元素数量,而且还可以像细胞分裂一样变为一分为二。这些新增加能力让流并行处理代码可以很方便地将工作分布到多个可用线程完成。...default Stream parallelStream(),返回一个可能并行Stream对象。Java8新增方法。流可以是顺序也可以是并行。...顺序流操作是在单线程执行,而并行流操作是在多线程并发执行。 List接口中额外抽象方法 boolean addAll(int index, Collection function),Java8新增使用Lambda方式遍历替换Map中元素默认接口方法 default V putIfAbsent(K key, V value),Java8...extends V> remappingFunction),Java8新增默认接口方法,将新计算值覆盖Map中原key对应value值 SortedSet接口中额外抽象方法 Comparator

57720

java中Map集合

事实,Map提供了一个Entry内部类来封装key-value对,再计算Entry存储时则只考虑Entry封装key。...(Object key,V defaultValue):获取指定key对应value,如果key不存在则返回defaultValue; System.out.println(hm.getOrDefault...java8改进HashMap和Hashtable实现类 HashMap和Hashtable关系完全类似于ArrayList和Vector关系。...WeakHashMap实现类 WeakHashMap与HashMap用法基本相似,区别在于HashMapkey保留了对实际对象强引用,这意味着只要该对象不销毁,该HashMap所有key所引用对象就不会被垃圾回收...时,IdentityHashMap才认为两个key相等,对于普通HashMap而言,只要key1和key2通过equals方法比较返回true,且它们hashcode相等即可。

89610

Java遍历Map效率对比

首先,Map.Entry是可以包含了Key和Value,keySet包含了所有的Key,再使用get方法可以拿到对应Value;所以包含Key和Value内容就有两种方式,我们再看访问模式...使用Map.Entry与for循环组合是最有效率 Map常用方法 Set keySet() Collection values() V get(Object key) boolean...containsKey(Object key) boolean containsValue(Object value) V getOrDefault(Object key, V defaultValue...) Java8 Map遍历使用了新方式forEach,这个函数就非常方便了,但是forEach中值k,v是不可变,在Java中是final,这样就无法将k,v赋值给外部变量了。...extends V> function) 参考 Map-Javadoc Map遍历效率比较 遍历HashMap几种方式及其效率比较,HashMap删除元素时如何处理 Java中HashMap四种遍历方法

88420

【深入Java基础】HashMap基本用法

另外,两种方法当key=null时,并不会抛出异常,而是按照一个特殊方法进行存储。删除元素如果之前对相同key多次put,则可以移除key对应旧value,而最新value不受影响。...hashMap.remove("bb"); hashMap.remove("aa",5);123获取元素对于获取元素,有get(key)和getOrDefault(key,defaultValue...hashMap.get("cc")1getOrDefault在key不存在时,返回一个defaultValue。...hashMap.get("bb"):-1;1有了getOrDefault可以这样写: getOrDefault("aa",-1)//key=aa不存在,所以返回默认value -11元素遍历...hashMap.replace("ff",5);1对于存在key,调用replace方法,会替换原来value,并返回旧value,这和put效果是一样;对于不存在key,replace方法什么都不做

68320

图解HashMap(二)

1 概述 上篇分析了HashMap设计思想以及Java7和Java8源码实现,当然还有一些”坑”还没填完,比如大家都知道HashMap是线程不安全数据结构,多线程情况下HashMap会引起死循环引用...再看下Thread2操作,同样Thread2往hashMap里put第13个键值对时候判断超过阀值,执行扩容操作,Thread2先创建一个新数组,不同是,Thread2运气好,在时间片轮换前转移工作也走完了...到此,Java7多线程操作HashMap可能形成死循环原因剖析完成。 3 Java8分析 通过上一篇学习可知,Java7转移前后位置颠倒,而Java8转移键值对前后位置不变。...这时候Thread2获得执行权,扩容并完成转移工作,通过上篇学习可知,Java8在转移前会创建两条链表,即扩容后位置不加原数组长度lo链和要加原数组长度hi链,这里假设石头和盖伦扩容前后都在5号坑...个人感觉即使不会出现死循环,但是通过源码看到put/get方法都没有加同步锁,多线程情况最容易出现就是:无法保证一秒put值,下一秒get时候还是原值,建议使用ConcurrentHashMap

38230

Map接口在1.8版本新增几个方法

extends V> remappingFunction) 总结 前言 Map接口在1.8版本新增以下几个有趣方法,今天参考源码来学习一下. getOrDefault replaceAll putIfAbsent...) 这可以说是最常用方法了吧,获取指定keyvalue,当key不存在时候返回一个默认值,也就是第二个参数....这个方法可以为一些耗时或者耗资源操作构建本地缓存,当元素存在时直接返回,当不存在时候进行耗时进行并存储,下一次可以直接返回. default V computeIfAbsent(K key,...System.out.println(test.toString()); } ------------------------------- {1=1, 2=2} {1=4, 2=2} 这个方法基本是上一个方法存在版本...,其他调用API都是原先已有的put,get,contain等常用API,因此这些新方法并不能算是很难用新功能,只能算是一些免去开发人员重复工作语法糖,我们当然要多多享受语法糖带来便利,但是不能忘却原理

54310
领券