थोड़ी देर हो सकती है लेकिन यहाँ मेरे दो सेंट हैं।
यदि आप Java 8 का उपयोग कर रहे हैं तो आप computeIfPresent मेथड का उपयोग कर सकते हैं । यदि निर्दिष्ट कुंजी के लिए मान मौजूद है और गैर-अशक्त है, तो यह कुंजी और इसके वर्तमान टैप किए गए मान को देखते हुए एक नई मैपिंग की गणना करने का प्रयास करता है।
final Map<String,Integer> map1 = new HashMap<>();
map1.put("A",0);
map1.put("B",0);
map1.computeIfPresent("B",(k,v)->v+1); //[A=0, B=1]
हम एक कुंजी लगाने के लिए किसी अन्य विधि putIfAbsent का उपयोग भी कर सकते हैं । यदि निर्दिष्ट कुंजी पहले से ही एक मूल्य से जुड़ी नहीं है (या नल के लिए मैप की गई है) तो यह विधि इसे दिए गए मूल्य के साथ जोड़ देती है और शून्य मान देती है, अन्यथा वर्तमान मान लौटा देती है।
यदि नक्शा थ्रेड्स में साझा किया जाता है, तो हम ConcurrentHashMap
और एटोमिकइंटर का उपयोग कर सकते हैं । डॉक्टर से:
एक AtomicInteger
अंतर मूल्य है जिसे परमाणु रूप से अद्यतन किया जा सकता है। एटोमिक इंटेगर का उपयोग परमाणु रूप से बढ़े हुए काउंटर जैसे अनुप्रयोगों में किया जाता है, और इसका उपयोग एक पूर्णांक के प्रतिस्थापन के रूप में नहीं किया जा सकता है। हालाँकि, यह वर्ग संख्या का विस्तार उपकरण और उपयोगिताओं द्वारा समान पहुंच की अनुमति देने के लिए करता है जो संख्यात्मक रूप से आधारित कक्षाओं से निपटते हैं।
हम उन्हें दिखाए गए अनुसार उपयोग कर सकते हैं:
final Map<String,AtomicInteger> map2 = new ConcurrentHashMap<>();
map2.putIfAbsent("A",new AtomicInteger(0));
map2.putIfAbsent("B",new AtomicInteger(0)); //[A=0, B=0]
map2.get("B").incrementAndGet(); //[A=0, B=1]
अवलोकन करने के लिए एक बिंदु यह है कि हम get
कुंजी के लिए मान प्राप्त करने के लिए आह्वान कर रहे हैं B
और फिर incrementAndGet()
इसके मूल्य पर आह्वान कर रहे हैं जो निश्चित रूप से है AtomicInteger
। हम इसे अनुकूलित कर सकते हैं क्योंकि विधि putIfAbsent
कुंजी के लिए मान लौटाता है यदि पहले से मौजूद है:
map2.putIfAbsent("B",new AtomicInteger(0)).incrementAndGet();//[A=0, B=2]
एक तरफ ध्यान दें कि अगर हम परमाणु अणु का उपयोग करने की योजना बनाते हैं, तो उच्चतर खपत की कीमत पर, लॉन्गएडर के थ्रूपुट के उच्च विवाद के तहत प्रलेखन के अनुसार काफी अधिक है। इस प्रश्न की भी जाँच करें ।