पाठ 35 / 38

Set, Iteration व Collections क्लास

Set परिवार पूरा करें, iterate करने के सुरक्षित तरीके (और iteration के दौरान हटाना) सीखें, और सॉर्टिंग, अपरिवर्तनीयता व सिंक्रोनाइज़ेशन के लिए java.util.Collections हेल्पर उपयोग करें।

HashSet, LinkedHashSet, TreeSet

Set परिवार बिल्कुल Map परिवार जैसा है, क्योंकि हर एक आंतरिक रूप से संबंधित map पर आधारित है: HashSetHashMap, LinkedHashSetLinkedHashMap, TreeSetTreeMap। वही क्रम-संबंधी 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);