Skip to main content

Java Set

Set adalah salah satu collection yang berisikan elemen-elemen yang unik, atau tidak boleh duplicate.

  • Set tidak memiliki index seperti di List, oleh karena itu tidak ada jaminan data yang ada di Set itu akan terurut sesuai dengan waktu kita memasukkan data ke Set.
  • Set tidak memiliki method baru, jadi hanya menggunakan method yang ada di interface parent-nya, yaitu Collection dan Iterable.
  • Karena tidak memiliki index, untuk mengambil data di Set juga 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:

NamaUraian
HashSetmenampung datanya secara acak berdasarkan Hash
LinkedHashSetmenampung datanya secara berurut menurut waktu pemasukan data (data baru ditambah di bawah)
EnumSetimplementasi Set yang datanya harus Enum
TreeSetmenyimpan 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 TreeSet akan 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, TreeSet menggunakan struktur data Red-Black Tree (pohon pencarian biner yang seimbang).
  • Performa: Waktu akses untuk operasi dasar seperti add, remove, dan contains lebih lambat dibandingkan HashSet, tetapi memberikan keuntungan berupa data yang selalu terurut.
  • Tidak Mengizinkan Nilai Null: TreeSet tidak 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