Key Components of Collections Framework:
1. Interfaces
- Define the core behaviour of collections.
- Examples: `List`, `Set`, `Queue`, `Deque`, `Map`.
2. Implementations (Classes)
- Concrete classes that implement the interfaces.
- Examples: `ArrayList`, `LinkedList`, `HashSet`, `HashMap`, `TreeMap`.
3. Algorithms
- Utility methods provided by the `Collections` class to manipulate collections.
- Examples: `sort`, `shuffle`, `reverse`, `binarySearch`.
Hierarchy of the Collections Framework
1. Core Interfaces
Collection: The root interface for most collection types (doesn't include `Map`).
- List: Ordered collection (allows duplicates).
- `ArrayList`, `LinkedList`, `Vector`
- Set: Unordered collection (does not allow duplicates).
- `HashSet`, `LinkedHashSet`, `TreeSet`
- Queue: FIFO (First-In-First-Out) order.
- `PriorityQueue`, `LinkedList`
- Deque: Double-ended queue.
- `ArrayDeque`, `LinkedList`
- Map: Represents key-value pairs.
- `HashMap`, `TreeMap`, `LinkedHashMap`, `Hashtable`
Common Classes and Their Features
1. List Implementations
- ArrayList:
- Dynamic array.
- Allows random access.
- Slower insertion/deletion compared to `LinkedList`.
- LinkedList:
- Doubly-linked list.
- Faster insertion/deletion than `ArrayList`.
- Vector:
- Synchronized (thread-safe).
- Legacy class, rarely used.
2. Set Implementations
- HashSet:
- Stores elements in a hash table.
- Fast access but no ordering.
- LinkedHashSet:
- Maintains insertion order.
- TreeSet:
- Sorted order (natural or custom comparator).
- Uses a red-black tree internally.
3. Map Implementations
- HashMap:
- Key-value pairs stored in a hash table.
- No ordering.
- LinkedHashMap:
- Maintains insertion order.
- TreeMap:
- Sorted order based on keys.
- Uses a red-black tree internally.
- Hashtable:
- Synchronized, legacy class.
4. Queue Implementations
- PriorityQueue:
- Elements ordered based on natural ordering or a custom comparator.
- ArrayDeque:
- Resizable array for both stack and queue operations.
Key Methods in the Collection Interface
| Method | Description |
|----------------------------|----------------------------------------------------------|
| `add(E e)` | Adds an element to the collection. |
| `remove(Object o)` | Removes a specified element from the collection. |
| `size()` | Returns the number of elements in the collection. |
| `isEmpty()` | Checks if the collection is empty. |
| `contains(Object o)` | Checks if the collection contains a specified element. |
| `iterator()` | Returns an iterator to traverse the collection. |
| `clear()` | Removes all elements from the collection. |
Utility Class: `Collections'
The `Collections` class provides static methods to perform operations on collections.
Common Methods:
| Method | Description |
|-----------------------------|----------------------------------------------------------|
| `sort(List<T> list)` | Sorts the list in natural order. |
| `reverse(List<?> list)` | Reverses the order of elements in the list. |
| `binarySearch(List<?>, key)`| Performs a binary search on the sorted list. |
| `shuffle(List<?> list)` | Randomly shuffles the elements in the list. |
| `min(Collection<? extends T>)` | Returns the minimum element of the collection. |
| `max(Collection<? extends T>)` | Returns the maximum element of the collection. |
Example: Collections in Action
import java.util.*;
public class CollectionsDemo {
public static void main(String[] args) {
// List Example
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Orange");
Collections.sort(list);
System.out.println("Sorted List: " + list);
// Set Example
Set<Integer> set = new HashSet<>();
set.add(10);
set.add(20);
set.add(10); // Duplicate, won't be added
System.out.println("Set: " + set);
// Map Example
Map<String, Integer> map = new HashMap<>();
map.put("A", 1);
map.put("B", 2);
map.put("C", 3);
System.out.println("Map: " + map);
// Queue Example
Queue<String> queue = new LinkedList<>();
queue.add("First");
queue.add("Second");
System.out.println("Queue: " + queue);
}
}
Advantages of the Collections Framework
1. Reusability: Ready-made data structures reduce development effort.
2. Interoperability: Collections are designed to work well with other APIs.
3. Flexibility: A wide variety of data structures to suit different needs.
4. Performance: Optimized implementations for better efficiency.
For any deeper explanation or specific examples, feel free to ask!