2012-06-14 18 views
9

संग्रह को डिबग करते समय मोडकाउंट चर क्या करता है जब संग्रह चर के लिए एक्लिप्स का उपयोग करते हुए जावा कोड डीबग करते समय, मैंने modcount सदस्य देखा। इसका क्या मतलब है?संग्रहण

उत्तर

31

जावा के कई संग्रह इटरेटर्स उत्पन्न करते हैं जो "असफल-तेज" होते हैं, जिसका अर्थ है कि अगर पुनरावृत्ति के बाद संग्रह बदल जाता है, तो इटरेटर को अमान्य कर दिया जाएगा और ConcurrentModificationException जितनी जल्दी हो सके फेंक देगा। (बाद में विफल होने या अमान्य डेटा लौटने की तुलना में।)

इस कार्यक्षमता का समर्थन करने के लिए, संग्रह को ट्रैक करना है कि इसे संशोधित किया गया है या नहीं। प्रत्येक बार संग्रह बदल जाता है, यह modcount में वृद्धि करता है। जब संग्रह एक पुनरावर्तक उत्पन्न करता है, तो इटेटरेटर modcount के मूल्य को तब से संग्रहीत करता है जब इसे बनाया गया था। फिर जब भी आप इटरेटर का उपयोग करने का प्रयास करते हैं, तो यह देखने के लिए जांचता है कि modcount मूल संग्रह के वर्तमान modcount से अलग है या नहीं; यदि ऐसा है, तो इटेटरेटर ConcurrentModificationException के साथ विफल रहता है।

यह वास्तव में अच्छा विवरण के लिए

+1

धन्यवाद (इस नियम का अपवाद है कि इटरेटर ही (इटरेटर के remove विधि की तरह के माध्यम से किया संग्रह के लिए संशोधन) इटरेटर को अमान्य नहीं है। है)। मुझे पता था कि यह ऐसा कुछ किया है, लेकिन विस्तृत नहीं – moeTi

+0

बहुत अच्छी व्याख्या। अब यह समझ में आता है। –

+0

कोड: http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/ArrayList.java#ArrayList.ListItr – roottraveller

संबंधित मुद्दे