पाठ 35 / 38
Set, Iteration व Collections क्लास
Set परिवार पूरा करें, iterate करने के सुरक्षित तरीके (और iteration के दौरान हटाना) सीखें, और सॉर्टिंग, अपरिवर्तनीयता व सिंक्रोनाइज़ेशन के लिए java.util.Collections हेल्पर उपयोग करें।
HashSet, LinkedHashSet, TreeSet
Set परिवार बिल्कुल Map परिवार जैसा है, क्योंकि हर एक आंतरिक रूप से संबंधित map पर आधारित है: HashSet→HashMap, LinkedHashSet→LinkedHashMap, TreeSet→TreeMap। वही क्रम-संबंधी trade-off लागू होते हैं।
Iterate करते समय हटाना
for-each लूप के चलते हुए list.remove(...) से collection बदलना ConcurrentModificationException फेंकता है। इसकी जगह Iterator के अपने remove(), या removeIf उपयोग करें।
List<Integer> nums = new ArrayList<>(List.of(1, 2, 3, 4, 5));
// Safe:
nums.removeIf(n -> n % 2 == 0);
// Also safe:
Iterator<Integer> it = nums.iterator();
while (it.hasNext()) {
if (it.next() > 3) it.remove();
}java.util.Collections हेल्पर
Collections यूटिलिटी क्लास (जिसे Collection इंटरफ़ेस से भ्रमित न करें) स्टैटिक हेल्पर देती है: list को यथास्थान सॉर्ट करें, unmodifiable बनाएँ, या thread-safe बनाएँ।
List<Integer> nums = new ArrayList<>(List.of(3, 1, 2));
Collections.sort(nums);
Collections.reverse(nums);
List<Integer> readOnly = Collections.unmodifiableList(nums);
List<Integer> safe = Collections.synchronizedList(nums);