欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java ConcurrentHashMap的使用示例

 更新時(shí)間:2021年04月28日 12:00:51   作者:精靈王  
這篇文章主要介紹了Java ConcurrentHashMap的使用示例,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下

構(gòu)造方法

// 1.無參數(shù)構(gòu)造方法
new ConcurrentHashMap();

// 2.指定初始容量
new ConcurrentHashMap(initialCapacity)

// 3.指定初始容量和加載因子
new ConcurrentHashMap(initialCapacity,loadFactor)

// 4.指定初始容量和加載因子與并發(fā)級別(并發(fā)更新線程數(shù))
new ConcurrentHashMap(initialCapacity, loadFactor, concurrencyLevel)

// 5.創(chuàng)建與給定映射具有相同映射的新映射
new ConcurrentHashMap(Map<? extends K, ? extends V> m)

方法介紹

新增元素

// 1.添加元素,不允許null
map.put(1,1);

// 2.添加一個(gè)map
map.putAll(map);
// 3.添加元素, 鍵不存在映射關(guān)系才添加成功
map.putIfAbsent(2,1);

刪除元素

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

替換元素

// 1.替換指定key
map.replace(1,3);

// 2.替換指定key,value
map.replace(1,2,4);

// 3.替換所有,這里是把value都乘以2
map.replaceAll((key,value)->value << 1);

查找元素

// 1.返回到指定鍵所映射的值
map.get("精靈王");

// 2. 返回指定鍵映射到的值,如果此映射不包含該鍵的映射,則返回給定的默認(rèn)值。
map.getOrDefault("精靈王","jinglingwang.cn");

// 指定搜素函數(shù)
// 1.通過在每個(gè)(鍵,值)上應(yīng)用給定的搜索函數(shù)返回非空結(jié)果,如果沒有則返回null。 
//   成功后,進(jìn)一步的元素處理被抑制,并且搜索功能的任何其他并行調(diào)用的結(jié)果被忽略。
Object a = map.search(5,(key,value)->{
    return (value & 1) == 0 ? value : null; // 查找第一個(gè)偶數(shù),如果是奇數(shù)返回null
});

// 2. 每個(gè)鍵上應(yīng)用給定搜索函數(shù)的非null結(jié)果,如果沒有則返回null。
String k = map.searchKeys(5,(key)->{
    return "jinglingwang".equals(key) ? key : null;
});
System.out.println(k);

// 3. 對每個(gè)值應(yīng)用給定的搜索函數(shù),如果沒有,返回null。
Integer v2 = map.searchValues(5,(value)->{
    return value == 2 ? 520 : null;
});
System.out.println(v2);

// 4.從每個(gè)entry應(yīng)用給定的搜索函數(shù),如果沒有,則返回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. 驗(yàn)證值是否存在, 等同于map.containsValue()方法
map.contains(4)

// 2. 驗(yàn)證key是否存在
map.containsKey("精靈王")

// 3. 驗(yàn)證值是否存在,等同于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 同時(shí)遍歷key,value
map.forEach((key,value)->{
    System.out.println(key+ " " + value);
});
// 6.2 同時(shí)遍歷key,value,找到滿足條件的執(zhí)行響應(yīng)函數(shù)
map.forEach(5,(key,value)->{
    System.out.println(key+ " " + value);
    return (value & 1) == 0 ? "jinglingwang.cn" : null;
},aa->{
    System.out.println(aa); // 條件中有偶數(shù),每次就輸出jinglingwang.cn
});

// 7.1遍歷
map.forEachEntry(5,(entry)->{
    System.out.println(entry.getKey() + " " + entry.getValue());
});

// 7.2遍歷查找,滿足條件執(zhí)行響應(yīng)的函數(shù)
map.forEachEntry(5,(entry)->{
    System.out.println(entry.getKey() + " " + entry.getValue());
    return (value & 1) == 0 ? "jinglingwang.cn" : null;
},aa->{
    System.out.println(aa); // 條件中有偶數(shù),每次就輸出jinglingwang.cn
});

// 8.1遍歷key
map.forEachKey(5,key->{
    System.out.println("key: " + key);
});
// 8.2遍歷key,滿足條件的key執(zhí)行響應(yīng)的函數(shù)
map.forEachKey(5,key->{
    System.out.println("key: " + key);
    return !key.equals("jinglingwang") ? "jinglingwang.cn" : null;
},kk ->{
    System.out.println(kk);
});

// 9.1 遍歷value
map.forEachValue(5,value->{
    System.out.println("value: " + value);
});
// 9.2 遍歷value,滿足條件的value執(zhí)行響應(yīng)的函數(shù)
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組合值來累積所有(鍵,值)對的給定轉(zhuǎn)換的結(jié)果,如果沒有,則返回null
String 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:0
transformer key:2 value:4
reducer key:0 value:4
transformer key:3 value:6
reducer key:04 value:6
transformer key:4 value:8
reducer key:046 value:8
res:0468

第一個(gè)transformer函數(shù)遍歷整個(gè)map,然后將返回值傳遞到reduce函數(shù)進(jìn)行計(jì)算,之后reduce函數(shù)的返回值再次參與到下一次的reduce函數(shù)的計(jì)算中。

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);
// 輸出結(jié)果
transformer key:1 value:0
reducer key:100.0 value:0.0
transformer key:2 value:4
reducer key:100.0 value:4.0
transformer key:3 value:6
reducer key:104.0 value:6.0
transformer key:4 value:8
reducer key:110.0 value:8.0
reduceToDouble:118.0

遍歷歸約所有的鍵值對,并把結(jié)果轉(zhuǎn)換成double類型。

類似的方法還有reduceToInt()和reduceToLong()。

reduceEntries()

// 第一種,返回值為entry
Map.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:0
transformer key:2 value:4
reducer key:1=0 value:2=4
transformer key:3 value:6
reducer key:2=4 value:3=6
transformer key:4 value:8
reducer key:3=6 value:4=8
reduceEntries: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:0
transformer key:2 value:4
reducer key:0 value:4
transformer key:3 value:6
reducer key:04 value:6
transformer key:4 value:8
reducer key:046 value:8
reduceEntries2:0468

transformer 函數(shù)每次返回的是一個(gè)entry,然后會傳入到reduce函數(shù)中,reduce的return值會繼續(xù)傳遞到下一次的reduce計(jì)算。

reduceEntriesToDouble()

// 返回使用給定的reducer累加給定變換的結(jié)果,以組合值,給定基礎(chǔ)作為一個(gè)標(biāo)識值
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);
// 輸出結(jié)果
transformer key:1 value:0
reducer key:100.0 value:0.0
transformer key:2 value:4
reducer key:100.0 value:4.0
transformer key:3 value:6
reducer key:104.0 value:6.0
transformer key:4 value:8
reducer key:110.0 value:8.0
reduceEntriesToDouble:118.0

其中transformer函數(shù)是以entry的形式來進(jìn)行遍歷的,第三個(gè)參數(shù)是一個(gè)歸約的標(biāo)識(初始默認(rèn)值),功能和reduceEntriesToInt()和reduceEntriesToLong()兩個(gè)方法非常相似。

reduceKeys()

// 1.第一種,只有reduce函數(shù),遍歷所有的鍵值對,reduce函數(shù)的返回值會作為下一次的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);
// 輸出結(jié)果
reducer key:1 value:2
reducer key:12 value:3
reducer key:123 value:4
newKey: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);
// 輸出結(jié)果
transformer key:1
transformer key:2
reducer key:1 value:2
transformer key:3
reducer key:12 value:3
transformer key:4
reducer key:123 value:4
newValue: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,并把結(jié)果轉(zhuǎn)換成double類型。

類似的方法還有reduceKeysToInt()和reduceKeysToLong()。

reduceValues()

// 第一種:僅reducer函數(shù)
double reduceValues = map.reduceValues(5,(key,value)->{
    System.out.println("reducer key:"+key+" value:"+value);
    return key+value;
});
System.out.println("reduceValues:"+reduceValues);
//輸出結(jié)果
reducer key:0 value:4
reducer key:4 value:6
reducer key:10 value:8
reduceValues:18.0

// 第二種,含有transformer
double 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);
// 輸出結(jié)果
transformer value:0
transformer value:4
reducer key:0.0 value:4.0
transformer value:6
reducer key:4.0 value:6.0
transformer value:8
reducer key:10.0 value:8.0
reduceValues2: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);
// 輸出結(jié)果
transformer value:0
reducer key:100.0 value:0.0
transformer value:4
reducer key:100.0 value:4.0
transformer value:6
reducer key:104.0 value:6.0
transformer value:8
reducer key:110.0 value:8.0
reduceValuesToDouble:118.0

遍歷歸約所有的value,并把結(jié)果轉(zhuǎn)換成double類型。

類似的方法還有reduceValuesToInt()和reduceValuesToLong()。

以上就是Java ConcurrentHashMap的使用示例的詳細(xì)內(nèi)容,更多關(guān)于Java ConcurrentHashMap的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • java應(yīng)用cpu占用過高問題分析及解決方法

    java應(yīng)用cpu占用過高問題分析及解決方法

    這篇文章主要介紹了java應(yīng)用cpu占用過高問題分析及解決方法,具有一定參考價(jià)值,需要的朋友可以參考下。
    2017-09-09
  • 帶你深入概括Java!六、方法和方法重載!(推薦)

    帶你深入概括Java!六、方法和方法重載?。ㄍ扑])

    這篇文章主要介紹了Java方法和方法重載,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Spring中基于Java的配置@Configuration和@Bean用法詳解

    Spring中基于Java的配置@Configuration和@Bean用法詳解

    這篇文章主要介紹了Spring中基于Java的配置@Configuration和@Bean用法詳解,Spring中為了減少xml中配置,可以聲明一個(gè)配置類(例如SpringConfig)來對bean進(jìn)行配置。,需要的朋友可以參考下
    2019-06-06
  • Java實(shí)現(xiàn)的不同圖片居中剪裁生成同一尺寸縮略圖功能示例

    Java實(shí)現(xiàn)的不同圖片居中剪裁生成同一尺寸縮略圖功能示例

    這篇文章主要介紹了Java實(shí)現(xiàn)的不同圖片居中剪裁生成同一尺寸縮略圖功能,涉及java針對圖片的讀取、屬性修改等相關(guān)操作技巧,需要的朋友可以參考下
    2017-09-09
  • Mybatis-Plus的應(yīng)用場景描述及注入SQL原理分析

    Mybatis-Plus的應(yīng)用場景描述及注入SQL原理分析

    MyBatis-Plus是一個(gè) MyBatis 的增強(qiáng)工具,在 MyBatis 的基礎(chǔ)上只做增強(qiáng)不做改變,為簡化開發(fā)、提高效率而生,本文重點(diǎn)給大家介紹Mybatis-Plus的應(yīng)用場景及注入SQL原理分析,感興趣的朋友跟隨小編一起學(xué)習(xí)吧
    2021-05-05
  • Spring data elasticsearch使用方法詳解

    Spring data elasticsearch使用方法詳解

    這篇文章主要介紹了Spring data elasticsearch使用方法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • SpringMVC框架實(shí)現(xiàn)圖片上傳與下載

    SpringMVC框架實(shí)現(xiàn)圖片上傳與下載

    這篇文章主要為大家詳細(xì)介紹了SpringMVC框架實(shí)現(xiàn)圖片上傳與下載,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • Java中Synchronized鎖的使用和原理詳解

    Java中Synchronized鎖的使用和原理詳解

    這篇文章主要介紹了Java中Synchronized鎖的使用和原理詳解,synchronized是?Java?內(nèi)置的關(guān)鍵字,它提供了一種獨(dú)占的加鎖方式,synchronized的獲取和釋放鎖由JVM實(shí)現(xiàn),用戶不需要顯示的釋放鎖,非常方便,需要的朋友可以參考下
    2023-07-07
  • Mybatis-Plus 條件構(gòu)造器 QueryWrapper 的基本用法

    Mybatis-Plus 條件構(gòu)造器 QueryWrapper 的基本用法

    這篇文章主要介紹了Mybatis-Plus - 條件構(gòu)造器 QueryWrapper 的使用,通過實(shí)例代碼給大家介紹了查詢示例代碼及實(shí)現(xiàn)需求,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • springboot接入cachecloud redis示例實(shí)踐

    springboot接入cachecloud redis示例實(shí)踐

    這篇文章主要介紹了springboot接入cachecloud redis示例實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10

最新評論