日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

th:each嵌套_难题:嵌套的computeIfAbsent

發布時間:2023/12/3 编程问答 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 th:each嵌套_难题:嵌套的computeIfAbsent 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

th:each嵌套

總覽

Java 8庫在地圖上有一個新方法,computeIfAbsent。 這是將地圖轉換為與鍵關聯的對象的緩存的非常有用的方法。

但是,您可能沒有考慮過一種組合。 如果您在內部調用computeIfAbsent會發生什么。

map.computeIfAbsent(Key.Hello, s -> {map.computeIfAbsent(Key.Hello, t -> 1);return 2; });enum Key {Hello}

盡管這在簡單的情況下看起來很奇怪,但是在更復雜的代碼中,您可能會偶然地做到這一點(就像我今天下午所做的那樣)那么會發生什么呢? 好吧,這取決于您使用的集合。

HashMap: {Hello=2} WeakHashMap: {Hello=2} TreeMap: {Hello=2} IdentityHashMap: {Hello=2} EnumMap: {Hello=2} Hashtable: {Hello=2, Hello=1} LinkedHashMap: {Hello=1, Hello=2} ConcurrentSkipListMap: {Hello=1} ConcurrentHashMap:

注意: ConcurrentHashMap永不返回。 它的鎖定似乎沒有重入。

ConcurrentSkipListMap具有最合理的結果,保留第一個添加的值。 對于這種不確定的情況,Hello = 2是合理的,如果令人困惑,因為它是第二個值而不是第一個值。 沒有什么意義的是讓唯一的不變鍵出現兩次。

不幸的是,ConcurrentHashMap死鎖本身很不幸,但至少不是那么微妙。

完整的代碼。

public class A {public static void main(String[] args) {for (Map map : new Map[]{new HashMap<>(),new WeakHashMap<>(),new TreeMap<>(),new IdentityHashMap<>(),new EnumMap<>(Key.class),new Hashtable<>(),new LinkedHashMap<>(),new ConcurrentSkipListMap<>(),new ConcurrentHashMap<>()}) {System.out.print(map.getClass().getSimpleName() + ": ");map.computeIfAbsent(Key.Hello, s -> {map.computeIfAbsent(Key.Hello, t -> 1);return 2;});System.out.println(map);}}enum Key {Hello} }

方法compute()具有相似的結果

HashMap: {Hello=null2} WeakHashMap: {Hello=null2} TreeMap: {Hello=null2} IdentityHashMap: {Hello=null2} EnumMap: {Hello=null2} Hashtable: {Hello=null2, Hello=1} LinkedHashMap: {Hello=1, Hello=null2} ConcurrentSkipListMap: {Hello=12}

ConcurrentHashMap:

public class A {public static void main(String[] args) {for (Map map : new Map[]{new HashMap<>(),new WeakHashMap<>(),new TreeMap<>(),new IdentityHashMap<>(),new EnumMap<>(Key.class),new Hashtable<>(),new LinkedHashMap<>(),new ConcurrentSkipListMap<>(),new ConcurrentHashMap<>()}) {System.out.print(map.getClass().getSimpleName() + ": ");map.compute(Key.Hello, (s, v) -> {map.compute(Key.Hello, (s2, v2) -> "1");return v + "2";});System.out.println(map);}}enum Key {Hello} }

結論

如果您要在lambda內部嵌套對地圖的調用,則需要特別小心,或者完全避免這樣做。 如果必須執行此操作,則ConcurrentSkipListMap似乎表現最佳。

翻譯自: https://www.javacodegeeks.com/2015/05/puzzler-nested-computeifabsent.html

th:each嵌套

總結

以上是生活随笔為你收集整理的th:each嵌套_难题:嵌套的computeIfAbsent的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。