Set — Struktur Data

Set adalah koleksi yang hanya menyimpan nilai unik — tidak ada duplikat. Operasi dan kompleksitas: Operasi Kompleksitas add(value) O(1) has(value) O(1)…

Set adalah kumpulan nilai yang masing-masing cuma boleh ada satu kali. Nilai yang sudah ada dan dimasukkan lagi diabaikan, jadi isinya selalu unik. Set juga bisa menjawab "nilai ini ada gak?" dengan sangat cepat. Mirip daftar tamu undangan: nama yang tertulis dua kali tetap dihitung satu tamu.

🧪 Tebakan cepat: new Set([3, 1, 3, 5, 1, 7, 3]) isinya berapa nilai, dan urutannya gimana? Tebak dulu, jawabannya ada di bagian "Membuang duplikat dari array".

Set: tiap nilai cuma sekali

const angka = new Set([1, 3, 5, 7]);

angka.add(9);
angka.add(3); // sudah ada, diabaikan

console.log(angka.size);   // 5
console.log(angka.has(5)); // true
console.log(angka.has(4)); // false
angka.delete(1);
console.log([...angka]);   // [3, 5, 7, 9]

Set menjaga urutan masuk: nilai disimpan sesuai kapan dia pertama kali ditambahkan.

Membuang duplikat dari array

const dobel = [3, 1, 3, 5, 1, 7, 3];
const unik = [...new Set(dobel)];

console.log(unik);  // [3, 1, 5, 7]
console.log(dobel); // [3, 1, 3, 5, 1, 7, 3]

Waktu new Set(dobel) dibuat, nilainya dimasukkan satu per satu:

Langkah Nilai Sudah ada? Isi Set
1 3 belum, masuk 3
2 1 belum, masuk 3, 1
3 3 sudah, diabaikan 3, 1
4 5 belum, masuk 3, 1, 5
5 1 sudah, diabaikan 3, 1, 5
6 7 lalu 3 7 masuk, 3 diabaikan 3, 1, 5, 7

Jawaban tebakan: 4 nilai, dalam urutan pertama kali muncul, 3, 1, 5, 7. Lalu [...] mengubahnya jadi array lagi. Array aslinya gak berubah. Dalam function, cukup return [...new Set(arr)];, atau Array.from(new Set(arr)) yang hasilnya sama.

has lebih cepat dari includes

arr.includes(x) mengecek isi array dari depan satu per satu. Itu O(n): array dua kali lebih panjang, waktunya kira-kira dua kali lebih lama. set.has(x) memakai trik yang sama dengan hash map, jadi rata-rata O(1): satu langkah, sebesar apa pun Set-nya.

Array Set
Nilai kembar boleh otomatis dibuang
Ambil lewat posisi (arr[0]) bisa gak bisa
Cek "ada gak?" includes, O(n) has, rata-rata O(1)

Jadi pakai Set kalau kamu butuh nilai yang unik dan sering mengecek "sudah ada belum?", misalnya daftar halaman yang sudah dikunjungi. Pakai array kalau urutan posisi penting atau nilai boleh kembar.

⚠️ Jebakan yang sering ketemu

📌 Gabungan, irisan, dan selisih

const a = new Set([1, 2, 3, 4]);
const b = new Set([3, 4, 5, 6]);

const gabungan = new Set([...a, ...b]);
const irisan = [...a].filter((x) => b.has(x));
const selisih = [...a].filter((x) => !b.has(x));

console.log([...gabungan]); // [1, 2, 3, 4, 5, 6]
console.log(irisan);        // [3, 4]
console.log(selisih);       // [1, 2]

Gabungan (union) adalah semua nilai dari dua Set. Irisan (intersection) adalah nilai yang ada di keduanya. Selisih (difference) adalah nilai yang ada di a tapi gak ada di b.

TL;DR: Set menyimpan nilai unik: add nilai yang sudah ada diabaikan. new Set([...]) dibuat dari array, size menghitung isinya, has mengecek ada atau gak dengan rata-rata O(1), lebih cepat dari includes yang O(n). Set menjaga urutan pertama kali muncul. Buang duplikat dari array: [...new Set(arr)], yang mengembalikan array baru tanpa mengubah array asli. Pakai Set untuk nilai unik dan cek keberadaan yang cepat, array untuk posisi dan nilai kembar.

Yang akan kamu pelajari