
Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Difference between ArrayList and CopyOnWriteArrayList in Java
Following are the notable differences between ArrayList and CopyOnWriteArrayList classes in Java.
ArrayList | CopyOnWriteArrayList | |
---|---|---|
Synchronized | ArrayList is not synchronized. | CopyOnWriteArrayList is synchronized. |
Thread Safe | ArrayList is not thread safe. | CopyOnWriteArrayList is thread safe. |
Iterator type | ArrayList iterator is fail-fast and ArrayList throws ConcurrentModificationException if concurrent modification happens during iteration. | CopyOnWriteArrayList is fail-safe and it will never throw ConcurrentModificationException during iteration. The reason behind the it that CopyOnWriteArrayList creates a new arraylist every time it is modified. |
Remove Opearation | ArrayList iterator supports removal of element during iteration. | CopyOnWriteArrayList.remove() method throws exception if elements are tried to be removed during iteration. |
Performance | ArrayList is faster. | CopyOnWriteArrayList is slower than ArrayList. |
Since Java Version | 1.2 | 1.5 |
Example
import java.util.Iterator; import java.util.concurrent.CopyOnWriteArrayList; public class Tester { public static void main(String args[]) { // create an array list CopyOnWriteArrayList<String> al = new CopyOnWriteArrayList(); System.out.println("Initial size of al: " + al.size()); // add elements to the array list al.add("C"); al.add("A"); al.add("E"); al.add("B"); al.add("D"); al.add("F"); al.add(1, "A2"); System.out.println("Size of al after additions: " + al.size()); // display the array list System.out.println("Contents of al: " + al); // Remove elements from the array list al.remove("F"); al.remove(2); System.out.println("Size of al after deletions: " + al.size()); System.out.println("Contents of al: " + al); try{ Iterator<String> iterator = al.iterator(); while(iterator.hasNext()) { iterator.remove(); } }catch(UnsupportedOperationException e) { System.out.println("Method not supported:"); } System.out.println("Size of al: " + al.size()); } }
This will produce the following result −
Output
Initial size of al: 0 Size of al after additions: 7 Contents of al: [C, A2, A, E, B, D, F] Size of al after deletions: 5 Contents of al: [C, A2, E, B, D] Method not supported: Size of al: 5
Advertisements