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