您的位置:首页技术文章
文章详情页

Java ConcurrentHashMap的使用示例

浏览:4日期:2022-08-13 14:02:21
构造方法

// 1.无参数构造方法new ConcurrentHashMap();// 2.指定初始容量new ConcurrentHashMap(initialCapacity)// 3.指定初始容量和加载因子new ConcurrentHashMap(initialCapacity,loadFactor)// 4.指定初始容量和加载因子与并发级别(并发更新线程数)new ConcurrentHashMap(initialCapacity, loadFactor, concurrencyLevel)// 5.创建与给定映射具有相同映射的新映射new ConcurrentHashMap(Map<? extends K, ? extends V> m)方法介绍

新增元素

// 1.添加元素,不允许nullmap.put(1,1);// 2.添加一个mapmap.putAll(map);// 3.添加元素, 键不存在映射关系才添加成功map.putIfAbsent(2,1);

删除元素

// 1.移除指定的keymap.remove(1);// 2.移除指定的key,value map.remove(2,2);

替换元素

// 1.替换指定keymap.replace(1,3);// 2.替换指定key,valuemap.replace(1,2,4);// 3.替换所有,这里是把value都乘以2map.replaceAll((key,value)->value << 1);

查找元素

// 1.返回到指定键所映射的值map.get('精灵王');// 2. 返回指定键映射到的值,如果此映射不包含该键的映射,则返回给定的默认值。map.getOrDefault('精灵王','jinglingwang.cn');// 指定搜素函数// 1.通过在每个(键,值)上应用给定的搜索函数返回非空结果,如果没有则返回null。 // 成功后,进一步的元素处理被抑制,并且搜索功能的任何其他并行调用的结果被忽略。Object a = map.search(5,(key,value)->{ return (value & 1) == 0 ? value : null; // 查找第一个偶数,如果是奇数返回null});// 2. 每个键上应用给定搜索函数的非null结果,如果没有则返回null。String k = map.searchKeys(5,(key)->{ return 'jinglingwang'.equals(key) ? key : null;});System.out.println(k);// 3. 对每个值应用给定的搜索函数,如果没有,返回null。Integer v2 = map.searchValues(5,(value)->{ return value == 2 ? 520 : null;});System.out.println(v2);// 4.从每个entry应用给定的搜索函数,如果没有,则返回null。Integer a = map.searchEntries(5,(entry)->{ System.out.println('entry:'+entry.getKey() + ' ' + entry.getValue()); return 'jinglingwang.cn'.equals(entry.getKey()) ? 1 : null;});System.out.println(a);

包含

// 1. 验证值是否存在, 等同于map.containsValue()方法map.contains(4)// 2. 验证key是否存在map.containsKey('精灵王')// 3. 验证值是否存在,等同于map.contains()方法map.containsValue(4)

遍历

// 1.返回此表中键的枚举map.keys();// 2.返回此地图中包含的键的Set视图map.keySet();// 3.返回此地图中键的Set视图,使用给定的映射值map.keySet(100)// 4. 返回此表中值的枚举。map.elements();// 5.返回此地图中包含的映射的Set视图。map.entrySet().forEach((entry)->{ System.out.println(entry.getKey() + ' ' + entry.getValue());});// 6.1 同时遍历key,valuemap.forEach((key,value)->{ System.out.println(key+ ' ' + value);});// 6.2 同时遍历key,value,找到满足条件的执行响应函数map.forEach(5,(key,value)->{ System.out.println(key+ ' ' + value); return (value & 1) == 0 ? 'jinglingwang.cn' : null;},aa->{ System.out.println(aa); // 条件中有偶数,每次就输出jinglingwang.cn});// 7.1遍历map.forEachEntry(5,(entry)->{ System.out.println(entry.getKey() + ' ' + entry.getValue());});// 7.2遍历查找,满足条件执行响应的函数map.forEachEntry(5,(entry)->{ System.out.println(entry.getKey() + ' ' + entry.getValue()); return (value & 1) == 0 ? 'jinglingwang.cn' : null;},aa->{ System.out.println(aa); // 条件中有偶数,每次就输出jinglingwang.cn});// 8.1遍历keymap.forEachKey(5,key->{ System.out.println('key: ' + key);});// 8.2遍历key,满足条件的key执行响应的函数map.forEachKey(5,key->{ System.out.println('key: ' + key); return !key.equals('jinglingwang') ? 'jinglingwang.cn' : null;},kk ->{ System.out.println(kk);});// 9.1 遍历valuemap.forEachValue(5,value->{ System.out.println('value: ' + value);});// 9.2 遍历value,满足条件的value执行响应的函数map.forEachValue(5,value->{ System.out.println('value: ' + value); return (value & 1) == 0 ? 'jinglingwang.cn' : null;},vv ->{ System.out.println(vv);});reduce归约

reduce()

//新增元素map.put('1',0);map.put('2',4);map.put('3',6);map.put('4',8);// 1. 返回使用给定的reducer组合值来累积所有(键,值)对的给定转换的结果,如果没有,则返回nullString res = map.reduce(5,(key,value)->{ System.out.println('transformer key:'+key+' value:'+value); return value+'';},(key,value)->{ System.out.println('reducer key:'+key+' value:'+value); return key+value+'';});System.out.println('res:'+res);

以上示例输出如下:

transformer key:1 value:0transformer key:2 value:4reducer key:0 value:4transformer key:3 value:6reducer key:04 value:6transformer key:4 value:8reducer key:046 value:8res:0468

第一个transformer函数遍历整个map,然后将返回值传递到reduce函数进行计算,之后reduce函数的返回值再次参与到下一次的reduce函数的计算中。

reduceToDouble()

double reduceToDouble = map.reduceToDouble(5,(key,value)->{ System.out.println('transformer key:'+key); return value;},100,(key,value)->{ System.out.println('reducer key:'+key+' value:'+value); return key+value;});System.out.println('reduceToDouble:'+reduceToDouble);// 输出结果transformer key:1 value:0reducer key:100.0 value:0.0transformer key:2 value:4reducer key:100.0 value:4.0transformer key:3 value:6reducer key:104.0 value:6.0transformer key:4 value:8reducer key:110.0 value:8.0reduceToDouble:118.0

遍历归约所有的键值对,并把结果转换成double类型。

类似的方法还有reduceToInt()和reduceToLong()。

reduceEntries()

// 第一种,返回值为entryMap.Entry reduceEntries = map.reduceEntries(5,entry->{ System.out.println('transformer key:'+entry.getKey()+' value:'+entry.getValue()); return entry;},(key,value)->{ System.out.println('reducer key:'+key+' value:'+value); return value;});System.out.println('reduceEntries:'+reduceEntries);// 输出如下transformer key:1 value:0transformer key:2 value:4reducer key:1=0 value:2=4transformer key:3 value:6reducer key:2=4 value:3=6transformer key:4 value:8reducer key:3=6 value:4=8reduceEntries:4=8// 第二种String reduceEntries2 = map.reduceEntries(5,(entry)->{ System.out.println('transformer key:'+entry.getKey()+' value:'+entry.getValue()); return entry.getValue()+'';},(key,value)->{ System.out.println('reducer key:'+key+' value:'+value); return key+value+'';});System.out.println('reduceEntries2:'+reduceEntries2);transformer key:1 value:0transformer key:2 value:4reducer key:0 value:4transformer key:3 value:6reducer key:04 value:6transformer key:4 value:8reducer key:046 value:8reduceEntries2:0468

transformer 函数每次返回的是一个entry,然后会传入到reduce函数中,reduce的return值会继续传递到下一次的reduce计算。

reduceEntriesToDouble()

// 返回使用给定的reducer累加给定变换的结果,以组合值,给定基础作为一个标识值Double reduceEntriesToDouble = map.reduceEntriesToDouble(5,entry->{ System.out.println('transformer key:'+entry.getKey()+' value:'+entry.getValue()); return Double.valueOf(entry.getValue());},100,(l,r)->{ System.out.println('reducer key:'+l+' value:'+r); return l+r;});System.out.println('reduceEntriesToDouble:'+reduceEntriesToDouble);// 输出结果transformer key:1 value:0reducer key:100.0 value:0.0transformer key:2 value:4reducer key:100.0 value:4.0transformer key:3 value:6reducer key:104.0 value:6.0transformer key:4 value:8reducer key:110.0 value:8.0reduceEntriesToDouble:118.0

其中transformer函数是以entry的形式来进行遍历的,第三个参数是一个归约的标识(初始默认值),功能和reduceEntriesToInt()和reduceEntriesToLong()两个方法非常相似。

reduceKeys()

// 1.第一种,只有reduce函数,遍历所有的键值对,reduce函数的返回值会作为下一次的key,如果没有则返回null。String newKey = map.reduceKeys(5,(key,value)->{ System.out.println('reducer key:'+key+' value:'+value); return key+value;**}**);System.out.println('newKey:'+newKey);// 输出结果reducer key:1 value:2reducer key:12 value:3reducer key:123 value:4newKey:1234// 2.第二种,有transformer和reducer String newValue = map.reduceKeys(5,(key)->{ System.out.println('transformer key:'+key); return key;},(key,value)->{ System.out.println('reducer key:'+key+' value:'+value); return key+value;});System.out.println('newValue:'+newValue);// 输出结果transformer key:1transformer key:2reducer key:1 value:2transformer key:3reducer key:12 value:3transformer key:4reducer key:123 value:4newValue:1234

reduceKeysToDouble()

double reduceKeysToDouble = map.reduceKeysToDouble(5,(key)->{ System.out.println('transformer key:'+key); return Double.parseDouble(key);},100,(key,value)->{ System.out.println('reducer key:'+key+' value:'+value); return key+value;});System.out.println('reduceKeysToDouble:'+reduceKeysToDouble);

遍历归约所有的key,并把结果转换成double类型。

类似的方法还有reduceKeysToInt()和reduceKeysToLong()。

reduceValues()

// 第一种:仅reducer函数double reduceValues = map.reduceValues(5,(key,value)->{ System.out.println('reducer key:'+key+' value:'+value); return key+value;});System.out.println('reduceValues:'+reduceValues);//输出结果reducer key:0 value:4reducer key:4 value:6reducer key:10 value:8reduceValues:18.0// 第二种,含有transformerdouble reduceValues2 = map.reduceValues(5,(value)->{ System.out.println('transformer value:'+value); return Double.valueOf(value);},(key,value)->{ System.out.println('reducer key:'+key+' value:'+value); return key+value;});System.out.println('reduceValues2:'+reduceValues2);// 输出结果transformer value:0transformer value:4reducer key:0.0 value:4.0transformer value:6reducer key:4.0 value:6.0transformer value:8reducer key:10.0 value:8.0reduceValues2:18.0

reduceValuesToDouble()

double reduceValuesToDouble = map.reduceValuesToDouble(5,(value)->{ System.out.println('transformer value:'+value); return Double.valueOf(value);},100,(l,r)->{ System.out.println('reducer key:'+l+' value:'+r); return l+r;});System.out.println('reduceValuesToDouble:'+reduceValuesToDouble);// 输出结果transformer value:0reducer key:100.0 value:0.0transformer value:4reducer key:100.0 value:4.0transformer value:6reducer key:104.0 value:6.0transformer value:8reducer key:110.0 value:8.0reduceValuesToDouble:118.0

遍历归约所有的value,并把结果转换成double类型。

类似的方法还有reduceValuesToInt()和reduceValuesToLong()。

以上就是Java ConcurrentHashMap的使用示例的详细内容,更多关于Java ConcurrentHashMap的资料请关注好吧啦网其它相关文章!

标签: Java
相关文章: