ArrayList और CopyOnWriteArrayList दोनों Java में List इंटरफेस के कार्यान्वयन हैं। लेकिन कुछ अंतर भी हैं।
ArrayList और CopyOnWriteArrayList के बीच महत्वपूर्ण अंतर निम्नलिखित हैं।
| क्रमांक | मुख्य बिंदु | ArrayList | CopyOnWriteArrayList |
|---|---|---|---|
| 1 | सिंक्रोनाइजेशन | ArrayList प्रकृति में सिंक्रोनाइज्ड नहीं है। | CopyOnWriteArrayList दूसरी ओर सिंक्रोनाइज्ड प्रकृति का है यानी एक समय में केवल एक थ्रेड ऑब्जेक्ट तक पहुंच सकता है। |
| 2 | परफॉरमेंस | ArrayList तेज है क्योंकि इसके ऑपरेशन में कोई सिंक्रोनाइजेशन नहीं है। | सिंक्रोनाइजेशन CopyOnWriteArrayList को परफॉरमेंस में धीमा बनाता है। |
| 3 | फेल सेफ्टी | ArrayList इटरेटर्स फेल-फास्ट होते हैं और ट्रैवर्सल के दौरान संशोधन पर ConcurrentModificationException फेंकते हैं। | CopyOnWriteArrayList फेल-सेफ हैं और ट्रैवर्सल के दौरान संशोधन की अनुमति देते हैं। |
| 4 | एलिमेंट हटाएं | ArrayList का इटरेटर इटरेशन के दौरान रिमूव ऑपरेशन कर सकता है। | CopyOnWriteArrayList इटरेशन के दौरान रिमूव ऑपरेशन नहीं कर सकता, अन्यथा यह रनटाइम एक्सेप्शन UnsupportedOperationException फेंकेगा। |
| 5 | Java में परिचय | ArrayList CopyOnWriteArrayList से पुराना है क्योंकि यह Java वर्जन 1.2 में जोड़ा गया था। | CopyOnWriteArrayList क्लास Java वर्जन 1.5 (या Java 5) में जोड़ा गया था। |
| 6 | पैकेज | ArrayList क्लास java.util पैकेज में मौजूद है। | CopyOnWriteArrayList क्लास java.util.concurrent पैकेज में मौजूद है। |
ArrayList बनाम CopyOnWriteArrayList का उदाहरण
ArrayListDemo.java
import java.util.*; public class ArrayListDemo{ public static void main(String[] args){ ArrayList l = new ArrayList(); l.add("A"); l.add("B"); l.add("C"); Iterator itr = l.iterator(); while (itr.hasNext()){ String s = (String)itr.next(); if (s.equals("B")){ itr.remove(); } } System.out.println(l); } }आउटपुट
[A,C]
उदाहरण
CopyOnWriteArrayListDemo.java
import java.util.concurrent.CopyOnWriteArrayList; import java.util.*; class CopyOnWriteArrayListDemo extends Thread { static CopyOnWriteArrayList l = new CopyOnWriteArrayList(); public static void main(String[] args) throws InterruptedException{ l.add("A"); l.add("B"); l.add("C"); Iterator itr = l.iterator(); while (itr.hasNext()){ String s = (String)itr.next(); System.out.println(s); if (s.equals("B")){ // रनटाइम एक्सेप्शन फेंकता है itr.remove(); } Thread.sleep(1000); } System.out.println(l); } }आउटपुट
A B Exception in thread "main" java.lang.UnsupportedOperationException