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