Remove Duplicates
समस्या
Array में दोहराई values हो सकती हैं, जैसे {1, 2, 2, 3, 4, 4, 5}। Duplicates हटाना मतलब हर एक की सिर्फ़ एक copy रखना — {1, 2, 3, 4, 5}। Java में सबसे साफ़ तरीका HashSet इस्तेमाल करता है, जो सिर्फ़ unique values रखता है।
HashSet इस्तेमाल
import java.util.*;
int[] arr = {1, 2, 2, 3, 4, 4, 5};
Set<Integer> unique = new HashSet<>();
for (int x : arr) {
unique.add(x); // duplicates अनदेखा
}
System.out.println(unique);
हर element को HashSet में जोड़ना सिर्फ़ distinct वाले रखता है — duplicates बस अनदेखा हो जाते हैं। यह सबसे छोटा और तेज़ आम तरीका है।
Dry run
| x | Set me pehle se hai? | Set ab |
|---|---|---|
| 1 | nahi | {1} |
| 2 | nahi | {1,2} |
| 2 | haan | {1,2} (skip) |
| 3 | nahi | {1,2,3} |
| 4 | nahi | {1,2,3,4} |
| 4 | haan | {1,2,3,4} (skip) |
| 5 | nahi | {1,2,3,4,5} |
हर element Set में जोड़ा जाता है। अगर वो पहले से हो (दोहराए 2 और 4), Set उसे अनदेखा करता है। सिर्फ़ unique values बचती हैं।
मैन्युअल तरीका
int[] arr = {1, 2, 2, 3};
ArrayList<Integer> result = new ArrayList<>();
for (int x : arr) {
if (!result.contains(x)) { // अभी तक नहीं देखा
result.add(x);
}
}
System.out.println(result);
Set बिना, आप loop करके हर element सिर्फ़ तब जोड़ते हैं जब वो पहले से results में न हो। यह चलता पर धीमा (O(n²)) है क्योंकि contains हर बार हर रखा item जाँचता है।
Order बनाए रखना
साधारण HashSet मूल order नहीं रखता। Order मायने रखे तो LinkedHashSet इस्तेमाल कीजिए:
Set<Integer> unique = new LinkedHashSet<>(); // items को पहली बार जोड़ने के क्रम में रखता है
LinkedHashSet duplicates हटाता है और insertion order बनाए रखता है — दोनों का सबसे अच्छा।
आम गलतियाँ
- HashSet से order की उम्मीद। Order मायने रखे तो LinkedHashSet इस्तेमाल कीजिए।
- बड़े arrays को मैन्युअल तरीका। यह O(n²) है — Set बेहतर।
- Import भूलना। Sets
java.utilसे आते हैं। - Set में primitives इस्तेमाल करना।
Integerइस्तेमाल कीजिए,intनहीं।
सारांश
- Duplicates हटाना हर value की एक copy रखता है।
- HashSet अपने-आप duplicates हटाता है — सबसे आसान तरीका।
containsवाला मैन्युअल loop भी चलता पर धीमा है।- मूल order रखने को LinkedHashSet इस्तेमाल कीजिए।
- HashSet तरीका लगभग O(n); मैन्युअल O(n²) है।
आगे, sets सीखिए HashSet vs TreeSet में, या arrays के साथ काम कीजिए Java arrays में।
