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:
- HashSet – Implementasi berbasis hash table, elemen tidak berurutan.
- LinkedHashSet – Seperti
HashSet
, tetapi mempertahankan urutan penambahan elemen. - TreeSet – Menggunakan struktur Red-Black Tree, menyimpan elemen secara terurut.
- 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
- https://www.digitalocean.com/community/tutorials/java-set diakses 20 Maret 2025
- https://docs.oracle.com/javase/8/docs/api/java/util/Set.html diakses 20 Maret 2025
Posting Komentar untuk "Mengenal Set di Java serta Contoh Penggunaannya"
Berilah komentar, saran, dan kritik dengan bijak