Java ArrayList
The most popular resizable array implementation in Java
š What is ArrayList?
ArrayList is a resizable array implementation that automatically grows and shrinks as needed, providing fast random access to elements by index.
// Creating and using ArrayList
import java.util.ArrayList;
ArrayList<String> names = new ArrayList<>();
names.add("John");
names.add("Jane");
System.out.println(names.get(0)); // Fast access by index
System.out.println("Size: " + names.size());
Output:
John
Size: 2
ArrayList Advantages
Fast Access
O(1) time for get/set operations
list.get(100); // Instant access
Dynamic Size
Automatically resizes as needed
// Starts small, grows automatically
list.add("item1000");
Memory Efficient
Stores elements in contiguous memory
// Better cache performance
list.trimToSize();
Easy to Use
Simple API with many utility methods
list.isEmpty();
list.contains("item");
š¹ Creating ArrayList
Different ways to create and initialize ArrayList:
import java.util.*;
public class ArrayListCreation {
public static void main(String[] args) {
// 1. Empty ArrayList
ArrayList<String> list1 = new ArrayList<>();
// 2. ArrayList with initial capacity
ArrayList<String> list2 = new ArrayList<>(50);
// 3. ArrayList from another collection
ArrayList<String> list3 = new ArrayList<>(Arrays.asList("A", "B", "C"));
// 4. Using List interface (recommended)
List<String> list4 = new ArrayList<>();
// 5. Initialize with values (Java 9+)
List<String> list5 = new ArrayList<>(List.of("X", "Y", "Z"));
System.out.println("List3: " + list3);
System.out.println("List5: " + list5);
}
}
Output:
List3: [A, B, C]
List5: [X, Y, Z]
š¹ ArrayList Methods
Essential ArrayList methods with examples:
import java.util.*;
public class ArrayListMethods {
public static void main(String[] args) {
ArrayList<Integer> numbers = new ArrayList<>();
// Adding elements
numbers.add(10); // Add at end
numbers.add(20);
numbers.add(1, 15); // Add at index 1
numbers.addAll(Arrays.asList(30, 40)); // Add multiple
System.out.println("After adding: " + numbers);
// Accessing elements
System.out.println("First element: " + numbers.get(0));
System.out.println("Last element: " + numbers.get(numbers.size() - 1));
// Modifying elements
numbers.set(0, 5); // Replace element at index 0
System.out.println("After set: " + numbers);
// Searching
System.out.println("Contains 20: " + numbers.contains(20));
System.out.println("Index of 30: " + numbers.indexOf(30));
// Removing elements
numbers.remove(1); // Remove by index
numbers.remove(Integer.valueOf(40)); // Remove by value
System.out.println("After removal: " + numbers);
// Size and capacity
System.out.println("Size: " + numbers.size());
System.out.println("Is empty: " + numbers.isEmpty());
}
}
Output:
After adding: [10, 15, 20, 30, 40]
First element: 10
Last element: 40
After set: [5, 15, 20, 30, 40]
Contains 20: true
Index of 30: 3
After removal: [5, 20, 30]
Size: 3
Is empty: false
š¹ ArrayList vs Array
Understanding the differences:
Array vs ArrayList Comparison:
| Feature | Array | ArrayList |
|---|---|---|
| Size | Fixed | Dynamic |
| Type | Primitives + Objects | Objects only |
| Methods | Length property | Many utility methods |
// Array example
int[] array = new int[5]; // Fixed size
array[0] = 10;
System.out.println("Array length: " + array.length);
// ArrayList example
ArrayList<Integer> list = new ArrayList<>(); // Dynamic size
list.add(10);
list.add(20); // Can keep adding
System.out.println("List size: " + list.size());
š¹ Performance Considerations
ArrayList Performance:
- Access by index: O(1) - Very fast
- Add at end: O(1) amortized - Usually fast
- Add at beginning/middle: O(n) - Slower, shifts elements
- Remove from end: O(1) - Fast
- Remove from beginning/middle: O(n) - Slower, shifts elements
- Search: O(n) - Must check each element