Java Set
Set adalah salah satu collection yang berisikan elemen-elemen yang unik, atau tidak boleh duplicate.
Settidak memiliki index seperti diList, oleh karena itu tidak ada jaminan data yang ada diSetitu akan terurut sesuai dengan waktu kita memasukkan data keSet.Settidak memiliki method baru, jadi hanya menggunakan method yang ada di interface parent-nya, yaituCollectiondanIterable.- Karena tidak memiliki index, untuk mengambil data di
Setjuga kita harus melakukan iterasi satu per satu.
Jadi bisa dikatakan Set adalah collection yang menampung elemen-elemenya secara unik sehingga datanya tidak ada yang ganda/sama.
Method yang dapat digunakan pada Set:

Set memiliki implentasi diantaranya:
source: https://www.programiz.com/sites/tutorial2program/files/java-set-implementation.png
Implentasi Set
Berikut beberapa implementasi Interface Set:
| Nama | Uraian |
|---|---|
HashSet | menampung datanya secara acak berdasarkan Hash |
LinkedHashSet | menampung datanya secara berurut menurut waktu pemasukan data (data baru ditambah di bawah) |
EnumSet | implementasi Set yang datanya harus Enum |
TreeSet | menyimpan elemen-elemen unik dalam urutan yang terurut (secara otomatis atau melalui comparator kustom) |
HashSet
Berikut contoh HashSet yang menampung datanya secara acak berdasarkan Hash.
import java.util.HashSet;
import java.util.Set;
public class DemoSet {
public static void main(String[] args) {
Set<String> persons = new HashSet<String>();
persons.add("Ucup");
persons.add("Ade");
persons.add("Restu");
persons.add("Ade");
persons.add("Ucup");
for (var p : persons) {
System.out.println(p);
}
}
}
Output:
Ucup
Restu
Ade
Dari output di atas data dapat dilihat bahwa data yang ditampung dalam HashSet tidak ada yang sama, dan ditampung secara acak tidak berdasarkan waktu memasukan data.
LinkedHashSet
Berikut contoh LinkedHashSet:
Set<String> persons = new LinkedHashSet<String>();
persons.add("Ucup");
persons.add("Ade");
persons.add("Restu");
persons.add("Ade");
persons.add("Ucup");
for (var p : persons) {
System.out.println(p);
}
Output:
Ucup
Ade
Restu
Dari output di atas data dapat dilihat bahwa data yang ditampung dalam LinkedHashSet tidak ada yang sama, dan ditampung berdasarkan waktu memasukan data.
EnumSet
Berikut contoh EnumSet:
public class DemoSet {
static enum Color {
RED, GREEN, BLUE, YELLOW
}
public static void main(String[] args) {
Set<Color> colors = EnumSet.allOf(Color.class);
for(var c : colors) {
System.out.println(c);
}
}
}
Output:
RED
GREEN
BLUE
YELLOW
Jika hanya menggunakan beberapa data pada Enum, gunakan method of():
Set<Color> colors = EnumSet.of(Color.BLUE, Color.YELLOW);
for(var c : colors) {
System.out.println(c);
}
TreeSet
Beberapa poin penting TreeSet:
- Terurut secara Otomatis: Elemen dalam
TreeSetakan selalu tersusun secara urut (ascendending) secara default. - Elemen Unik: Tidak mengizinkan adanya duplikasi data. Jika Anda memasukkan elemen yang sudah ada, elemen tersebut akan diabaikan.
- Struktur Data: Di balik layar,
TreeSetmenggunakan struktur data Red-Black Tree (pohon pencarian biner yang seimbang). - Performa: Waktu akses untuk operasi dasar seperti
add,remove, dancontainslebih lambat dibandingkanHashSet, tetapi memberikan keuntungan berupa data yang selalu terurut. - Tidak Mengizinkan Nilai Null:
TreeSettidak memperbolehkan penyimpanan nilai null karena akan menimbulkan NullPointerException saat mencoba membandingkan elemen. - Tidak Thread-Safe: Secara default, TreeSet tidak sinkron. Jika digunakan dalam lingkungan multi-thread, harus dikelola secara eksternal.
Contoh:
import java.util.Set;
import java.util.TreeSet;
public class DemoTreeSet {
public static void main(String[] args) {
Set<Integer> number = new TreeSet<Integer>();
number.add(5);
number.add(34);
number.add(0);
for (int n : number) {
System.out.println(n);
}
}
}
Output:
0
5
34