# Set, Iteration व Collections क्लास — कोर जावा

Source: https://www.geekswithgeeks.com/hi/core-java/java-collections-utility

> 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` उपयोग करें।

```java
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 बनाएँ।

```java
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);
```
