विशिष्ट उदाहरण को देखते हुए। इसमें कभी भी कोई तत्व नहीं होगा।के और अधिक सामान्य स्थिति को देखते हुए:
static final Map BAR = Collections.unmodifiableMap(getMap());
तब किया जाए या नहीं इस अपरिवर्तनीय है पूरी तरह से किसी और अंतर्निहित मानचित्र को प्राप्त कर सकते हैं या नहीं, पर निर्भर है, और मानचित्र के लिए किस प्रकार यह है। उदाहरण के लिए, यदि यह एक लिंक्ड हैशैप है तो अंतर्निहित लिंक सूची को एक्सेस ऑर्डर द्वारा संशोधित किया जा सकता है, और कॉल() को कॉल करके बदल सकता है। सबसे सुरक्षित तरीका (गैर समवर्ती वर्गों का उपयोग करना) करने के लिए इस होगा:
static final Map BAR = Collections.unmodifiableMap(new HashMap(getMap()));
javadocs for HashMap मतलब है कि इतने लंबे समय के रूप में आप नक्शे के लिए कोई संरचनात्मक परिवर्तन करें, फिर इसे सुरक्षित यह समवर्ती उपयोग करने के लिए है, इसलिए इस किसी भी एक्सेसर्स के लिए सुरक्षित होना चाहिए जिसका आप उपयोग कर सकते हैं, जो विभिन्न सेट प्राप्त कर रहा है और उन पर फिर से चल रहा है और() को सुरक्षित होना चाहिए।
आप समवर्ती कक्षाओं का उपयोग कर सकते हैं, तो आप भी कर सकता है:
static final Map BAR = Collections.unmodifiableMap(new ConcurrentHashMap(getMap());
यह स्पष्ट रूप से एक से अधिक थ्रेड से उपयोग करने के लिए सुरक्षित हो जाएगा के बाद से ConcurrentHashMap स्पष्ट रूप से सुरक्षित बहु धागा पहुँच है। आंतरिक स्थिति उत्परिवर्तनीय हो सकती है, लेकिन बाहरी रूप से दिखाई देने वाली स्थिति नहीं होगी, और चूंकि कक्षा को थ्रेडसेफ होने की गारंटी है, इसलिए हम इसे सुरक्षित रूप से अपरिवर्तनीय मान सकते हैं।
स्रोत
2010-01-15 21:18:32
वास्तव में एक अच्छा सवाल है। 'WeakHashMap' सोचें - जो बिना बदले में बदल सकता है। एक्सेस-ऑर्डर मोड में 'LinkedHashMap' वही है। –
(आप अपने प्रश्न शीर्षक को प्रश्न में बैनर करना चाहते हैं - बैनर अंधापन।) –
लेखक का एक अच्छा सवाल है। मान लें कि मैं अपना नक्शा कार्यान्वयन लिखता हूं। आइए मान लें कि प्रत्येक लुकअप पर, यह इसकी आंतरिक संरचना को पुनर्गठित करता है ताकि अगली बार सबसे अधिक देखी गई वस्तुओं को तेज़ी से मिल सके। उपयोगकर्ता लपेटें मानचित्र को एक अपरिवर्तनीय संग्रह के साथ कहा और इसे थ्रेडसेफ मानता है। फिर 2 थ्रेड एक साथ विभिन्न मानों तक पहुंचते हैं और आंतरिक अनुकूलक मानचित्र की आंतरिक स्थिति को खराब करता है। – z5h