Interview question
What is the difference between HashSet, LinkedHashSet, and TreeSet? HashSet, LinkedHashSet, और TreeSet में क्या अंतर है?
Answer
All three implement the Set interface (no duplicates), but differ in ordering guarantees and underlying implementation, since Set implementations are typically backed by a corresponding Map.
| Class | Backed by | Order |
|---|---|---|
| HashSet | HashMap | No guaranteed order |
| LinkedHashSet | LinkedHashMap | Insertion order |
| TreeSet | TreeMap (via NavigableMap) | Sorted order |
Set<String> hashSet = new HashSet<>();
hashSet.add('cherry'); hashSet.add('apple'); hashSet.add('banana');
System.out.println(hashSet); // order not guaranteed
Set<String> linkedSet = new LinkedHashSet<>();
linkedSet.add('cherry'); linkedSet.add('apple'); linkedSet.add('banana');
System.out.println(linkedSet); // [cherry, apple, banana] - insertion order
Set<String> treeSet = new TreeSet<>();
treeSet.add('cherry'); treeSet.add('apple'); treeSet.add('banana');
System.out.println(treeSet); // [apple, banana, cherry] - sorted
// TreeSet additional navigation methods
TreeSet<Integer> numbers = new TreeSet<>(Arrays.asList(10, 20, 30, 40));
System.out.println(numbers.first()); // 10
System.out.println(numbers.last()); // 40
System.out.println(numbers.higher(20)); // 30 - smallest element > 20
System.out.println(numbers.lower(20)); // 10 - largest element < 20| Class | किस पर backed | Order |
|---|---|---|
| HashSet | HashMap | Guaranteed नहीं |
| LinkedHashSet | LinkedHashMap | Insertion order |
| TreeSet | TreeMap | Sorted order |
Set<String> hashSet = new HashSet<>();
hashSet.add('cherry'); hashSet.add('apple'); hashSet.add('banana');
Set<String> linkedSet = new LinkedHashSet<>();
linkedSet.add('cherry'); linkedSet.add('apple'); linkedSet.add('banana');
System.out.println(linkedSet); // insertion order
Set<String> treeSet = new TreeSet<>();
treeSet.add('cherry'); treeSet.add('apple'); treeSet.add('banana');
System.out.println(treeSet); // sorted
TreeSet<Integer> numbers = new TreeSet<>(Arrays.asList(10, 20, 30, 40));
System.out.println(numbers.first()); // 10
System.out.println(numbers.higher(20)); // 30Was this answer clear?