| क्र. सं. |
मुख्य बिंदु |
फेल-फास्ट |
फेल-सेफ |
| 1 |
अपवाद |
थ्रेड के इटरेट करते समय कलेक्शन में कोई भी परिवर्तन, जैसे जोड़ना, हटाना और अपडेट करना, तो फेल-फास्ट ConcurrentModificationException फेंकता है। |
फेल-सेफ कलेक्शन अपवाद नहीं फेंकता। |
| 2. |
कलेक्शन का प्रकार |
ArrayList और HashMap कलेक्शन फेल-फास्ट इटरेटर के उदाहरण हैं |
CopyOnWrite और ConcurrentHashMap फेल-सेफ इटरेटर के उदाहरण हैं |
| 3. |
प्रदर्शन और मेमोरी |
यह वास्तविक कलेक्शन पर काम करता है। इसलिए, इस इटरेटर को अतिरिक्त मेमोरी और समय की आवश्यकता नहीं होती |
यह वास्तविक कलेक्शन के बजाय कलेक्शन के क्लोन पर काम करता है। यह समय और मेमोरी के संदर्भ में ओवरहेड है |
| 4. |
संशोधन |
इटरेटर इटरेशन के दौरान कलेक्शन के संशोधन की अनुमति नहीं देते। |
फेल-सेफ इटरेटर इटरेशन के दौरान कलेक्शन के संशोधन की अनुमति देते हैं। |
फेल-सेफ का उदाहरण
public class FailSafeExample{
public static void main(String[] args){
ConcurrentHashMap map = new ConcurrentHashMap();
// मैप में एलिमेंट जोड़ना
map.put("Dell", 1);
map.put("IBM", 2);
// मैप से इटरेटर प्राप्त करना
Iterator it = map.keySet().iterator();
while (it.hasNext()){
String key = (String) it.next();
System.out.println(key + " : " + map.get(key));
map.put("Google", 3);
}
}
}
आउटपुट
IBM :2 Dell:1
फेल-फास्ट का उदाहरण
public class FailFastExample{
public static void main(String[] args){
List list = new ArrayList();
list.add(1);
list.add(2);
list.add(3);
// लिस्ट से इटरेटर प्राप्त करना
Iterator it = list.iterator();
while (it.hasNext()){
Integer integer = (Integer) it.next();
list.add(4);
}
}
}
आउटपुट
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(Unknown Source)