मेरा मानना है कि यह है, कम से कम आंशिक रूप से, आप गठबंधन करने के लिए अनुमति देने के लिए containsKey
और get
एक कॉल में। यदि मानचित्र get
अशक्त पकड़ सकता है, तो यह बताने का कोई तरीका नहीं है कि क्या कोई अशक्त लौट रहा है क्योंकि उस मूल्य के लिए कोई कुंजी नहीं थी, या केवल इसलिए कि मान शून्य था।
वह एक समस्या क्यों है? क्योंकि अपने आप को करने के लिए कोई सुरक्षित तरीका नहीं है। निम्नलिखित कोड लें:
if (m.containsKey(k)) {
return m.get(k);
} else {
throw new KeyNotPresentException();
}
चूंकि m
एक समवर्ती नक्शा है, कुंजी k को कॉल containsKey
और get
कॉल के बीच हटाया जा सकता है , जिससे इस स्निपेट को एक नल वापस करना होगा जो वांछित के बजाय तालिका में कभी नहीं था KeyNotPresentException
।
आम तौर पर आप इसे सिंक्रनाइज़ करके हल करेंगे, लेकिन समवर्ती नक्शे के साथ निश्चित रूप से काम नहीं करेंगे। इसलिए हस्ताक्षर के लिए get
बदलाव करना पड़ा, और पीछे की ओर से संगत तरीके से ऐसा करने का एकमात्र तरीका उपयोगकर्ता को पहले स्थान पर शून्य मान डालने से रोकना था, और "कुंजी नहीं मिली" के लिए प्लेसहोल्डर के रूप में उपयोग करना जारी रखें।