Mengenal Set di Java serta Contoh Penggunaannya

Dalam Java, Set adalah bagian dari Java Collection Framework yang digunakan untuk menyimpan sekumpulan elemen unik (tidak ada duplikasi). Jika Anda perlu menyimpan data tanpa ada elemen yang sama, Set adalah pilihan yang tepat dibandingkan List.

Terdapat beberapa implementasi utama dari Set dalam Java:

  1. HashSet – Implementasi berbasis hash table, elemen tidak berurutan.
  2. LinkedHashSet – Seperti HashSet, tetapi mempertahankan urutan penambahan elemen.
  3. TreeSet – Menggunakan struktur Red-Black Tree, menyimpan elemen secara terurut.
  4. ConcurrentSkipListSet – Digunakan dalam multi-threading, elemen tetap terurut.

Artikel ini akan membahas berbagai jenis Set dan contoh penggunaannya.


1. Apa Itu Set di Java?

Set adalah interface dalam java.util yang tidak mengizinkan duplikasi elemen. Beberapa karakteristik utama dari Set:
Tidak mengizinkan elemen duplikat.
Tidak memiliki indeks, berbeda dengan List.
Memiliki beberapa implementasi dengan perilaku berbeda.


2. Implementasi Set dalam Java

a) HashSet: Set dengan Performa Cepat

HashSet menggunakan struktur hash table, sehingga penyimpanan elemen tidak berurutan tetapi memiliki performa tinggi dalam operasi add, remove, dan contains (O(1) dalam banyak kasus).

Contoh Penggunaan HashSet:

import java.util.HashSet;

public class HashSetExample {
    public static void main(String[] args) {
        HashSet<String> set = new HashSet<>();
        set.add("Java");
        set.add("Python");
        set.add("JavaScript");
        set.add("Java"); // Duplikat, tidak akan ditambahkan

        System.out.println(set); // Output: [JavaScript, Python, Java] (Urutan tidak terjamin)
    }
}

📌 Kelebihan: Cepat dalam operasi dasar (add, remove, contains).
📌 Kekurangan: Tidak mempertahankan urutan elemen.


b) LinkedHashSet: Set dengan Urutan Terjaga

LinkedHashSet seperti HashSet, tetapi mempertahankan urutan penambahan elemen.

Contoh Penggunaan LinkedHashSet:

import java.util.LinkedHashSet;

public class LinkedHashSetExample {
    public static void main(String[] args) {
        LinkedHashSet<String> set = new LinkedHashSet<>();
        set.add("Java");
        set.add("Python");
        set.add("JavaScript");

        System.out.println(set); // Output: [Java, Python, JavaScript] (Urutan terjaga)
    }
}

📌 Kelebihan: Mempertahankan urutan elemen seperti saat ditambahkan.
📌 Kekurangan: Sedikit lebih lambat dibanding HashSet.


c) TreeSet: Set dengan Elemen Terurut

TreeSet menyimpan elemen dalam urutan alami (ascending) menggunakan struktur Red-Black Tree.

Contoh Penggunaan TreeSet:

import java.util.TreeSet;

public class TreeSetExample {
    public static void main(String[] args) {
        TreeSet<Integer> set = new TreeSet<>();
        set.add(50);
        set.add(10);
        set.add(30);
        set.add(20);

        System.out.println(set); // Output: [10, 20, 30, 50] (Terurut ascending)
    }
}

📌 Kelebihan: Elemen selalu terurut secara alami.
📌 Kekurangan: Lebih lambat dibanding HashSet karena menggunakan struktur tree (O(log n) untuk add, remove, contains).


d) ConcurrentSkipListSet: Set untuk Multi-threading

Digunakan dalam lingkungan multi-threading, ConcurrentSkipListSet menjaga elemen tetap terurut sambil memastikan keamanan saat diakses oleh banyak thread.

Contoh Penggunaan ConcurrentSkipListSet:

import java.util.concurrent.ConcurrentSkipListSet;

public class ConcurrentSetExample {
    public static void main(String[] args) {
        ConcurrentSkipListSet<Integer> set = new ConcurrentSkipListSet<>();
        set.add(5);
        set.add(1);
        set.add(10);

        System.out.println(set); // Output: [1, 5, 10] (Terurut)
    }
}

📌 Kelebihan: Thread-safe, elemen tetap terurut.
📌 Kekurangan: Lebih lambat dibanding TreeSet karena tambahan mekanisme sinkronisasi.


3. Perbandingan Implementasi Set

Fitur HashSet LinkedHashSet TreeSet ConcurrentSkipListSet
Duplikasi Dilarang
Urutan Terjaga
Kecepatan Operasi 🔥 Cepat (O(1)) ⚡ Sedikit lebih lambat 🐢 Lebih lambat (O(log n)) 🐢 Lebih lambat (O(log n))
Struktur Data Hash Table Hash Table + Linked List Red-Black Tree Skip List
Thread-Safe

🔥 Gunakan HashSet untuk performa terbaik jika urutan tidak penting.
🔄 Gunakan LinkedHashSet jika ingin mempertahankan urutan.
📈 Gunakan TreeSet jika perlu elemen selalu dalam keadaan terurut.
🛡 Gunakan ConcurrentSkipListSet jika bekerja dalam lingkungan multi-threading.


4. Operasi Dasar pada Set

Semua Set mendukung operasi dasar berikut:

import java.util.HashSet;
import java.util.Set;

public class SetOperations {
    public static void main(String[] args) {
        Set<String> set = new HashSet<>();
        set.add("Apple");
        set.add("Banana");
        set.add("Cherry");

        System.out.println(set.contains("Banana")); // true
        set.remove("Banana");
        System.out.println(set.size()); // 2
    }
}

add(value) – Menambahkan elemen ke dalam Set.
remove(value) – Menghapus elemen dari Set.
contains(value) – Mengecek apakah elemen ada di dalam Set.
size() – Mendapatkan jumlah elemen dalam Set.


5. Tips dan Trik Menggunakan Set

🔹 Gunakan HashSet jika hanya butuh keunikan elemen tanpa peduli urutan.
🔹 Gunakan TreeSet jika ingin elemen selalu dalam keadaan terurut.
🔹 Gunakan LinkedHashSet jika ingin mempertahankan urutan elemen.
🔹 Gunakan ConcurrentSkipListSet jika bekerja dalam lingkungan multi-threading.
🔹 Konversi List ke Set untuk menghapus elemen duplikat:

List<String> list = Arrays.asList("A", "B", "A", "C");
Set<String> set = new HashSet<>(list);

Kesimpulan

  • Set digunakan untuk menyimpan elemen unik tanpa duplikasi.
  • HashSet memiliki performa cepat, tetapi tidak mempertahankan urutan.
  • LinkedHashSet mempertahankan urutan penambahan elemen.
  • TreeSet menyimpan elemen dalam urutan alami (ascending).
  • ConcurrentSkipListSet cocok untuk aplikasi multi-threading.

Sumber dan Referensi

Posting Komentar untuk "Mengenal Set di Java serta Contoh Penggunaannya"