ArrayList এবং CopyOnWriteArrayList উভয়ই জাভাতে List ইন্টারফেসের ইমপ্লিমেন্টেশন। কিন্তু কিছু পার্থক্য রয়েছে।
ArrayList এবং CopyOnWriteArrayList-এর মধ্যে গুরুত্বপূর্ণ পার্থক্যগুলো:
| ক্র. নং | কী | ArrayList | CopyOnWriteArrayList |
|---|---|---|---|
| ১ | সিনক্রোনাইজেশন | ArrayList সিনক্রোনাইজড নয়। | CopyOnWriteArrayList সিনক্রোনাইজড, একসময়ে একই থ্রেড অ্যাক্সেস করতে পারে। |
| ২ | পারফরম্যান্স | ArrayList দ্রুত, কারণ সিনক্রোনাইজেশন নেই। | সিনক্রোনাইজেশন কপি-অন-রাইট অ্যারেলিস্টকে ধীর করে। |
| ৩ | ফেইল সেফটি | ArrayList ইটেরেটর ফেইল-ফাস্ট, ট্রাভার্সালের সময় মডিফিকেশনে ConcurrentModificationException থ্রো করে। | CopyOnWriteArrayList ফেইল-সেফ, ট্রাভার্সালের সময় মডিফিকেশন অনুমতি দেয়। |
| ৪ | এলিমেন্ট রিমুভ | ArrayList ইটেরেটর ইটারেশন সময় রিমুভ অপারেশন করতে পারে। | CopyOnWriteArrayList ইটারেশন সময় রিমুভ করতে UnsupportedOperationException থ্রো করে। |
| ৫ | জাভাতে পরিচয় | ArrayList পুরানো, জাভা ১.২-এ যোগ হয়েছিল। | CopyOnWriteArrayList জাভা ১.৫ (জাভা ৫)-এ যোগ হয়েছিল। |
| ৬ | প্যাকেজ | ArrayList java.util প্যাকেজে আছে। | CopyOnWriteArrayList java.util.concurrent প্যাকেজে আছে। |
ArrayList vs 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")){ // Throws RuntimeException itr.remove(); } Thread.sleep(1000); } System.out.println(l); } }
আউটপুট
A B Exception in thread "main" java.lang.UnsupportedOperationException