EnumSet
Operasi set yang cepat pada enum.
EnumSet adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Java Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Java Academy mencakup 4 pelajaran total.
Apa Itu EnumSet?
EnumSet adalah implementasi khusus Set yang hanya ditujukan untuk tipe enumerasi.
Secara internal, EnumSet adalah vektor bit: setiap konstanta dipetakan ke satu bit. Ini membuatnya sangat cepat dan hemat memori dibandingkan HashSet yang berisi enumerasi.
import java.util.EnumSet;
import java.util.Set;
public class Main {
enum Day { MON, TUE, WED, THU, FRI, SAT, SUN }
public static void main(String[] args) {
Set<Day> weekend = EnumSet.of(Day.SAT, Day.SUN);
System.out.println(weekend);
}
}Membuat dengan of
Pabrik EnumSet.of(...) membuat himpunan dari konstanta yang dicantumkan. Tersedia bentuk untuk satu hingga lima elemen, serta versi varargs.
import java.util.EnumSet;
public class Main {
enum Perm { READ, WRITE, EXECUTE }
public static void main(String[] args) {
EnumSet<Perm> perms = EnumSet.of(Perm.READ, Perm.WRITE);
System.out.println(perms);
}
}allOf dan noneOf
Dua pabrik lainnya:
allOf(Type.class)membuat himpunan yang berisi setiap konstanta.noneOf(Type.class)membuat himpunan kosong yang siap diisi.
import java.util.EnumSet;
public class Main {
enum Color { RED, GREEN, BLUE }
public static void main(String[] args) {
EnumSet<Color> all = EnumSet.allOf(Color.class);
EnumSet<Color> none = EnumSet.noneOf(Color.class);
none.add(Color.RED);
System.out.println("all: " + all);
System.out.println("built: " + none);
}
}range untuk Konstanta Berurutan
EnumSet.range(from, to) menyertakan semua konstanta di antara dua batas, termasuk keduanya, dalam urutan deklarasi.
import java.util.EnumSet;
public class Main {
enum Day { MON, TUE, WED, THU, FRI, SAT, SUN }
public static void main(String[] args) {
EnumSet<Day> workdays = EnumSet.range(Day.MON, Day.FRI);
System.out.println(workdays);
}
}complementOf
EnumSet.complementOf(set) mengembalikan himpunan semua konstanta yang tidak terdapat dalam himpunan yang diberikan.
Ini adalah cara cepat untuk membalik pilihan.
import java.util.EnumSet;
public class Main {
enum Day { MON, TUE, WED, THU, FRI, SAT, SUN }
public static void main(String[] args) {
EnumSet<Day> work = EnumSet.range(Day.MON, Day.FRI);
EnumSet<Day> rest = EnumSet.complementOf(work);
System.out.println(rest);
}
}Operasi Himpunan
Karena EnumSet adalah Set yang sebenarnya, Anda mendapatkan gabungan, irisan, dan selisih melalui addAll, retainAll, dan removeAll.
Di balik layar, operasi ini berjalan sebagai operasi bit yang sangat cepat.
import java.util.EnumSet;
public class Main {
enum Tag { A, B, C, D }
public static void main(String[] args) {
EnumSet<Tag> x = EnumSet.of(Tag.A, Tag.B, Tag.C);
EnumSet<Tag> y = EnumSet.of(Tag.B, Tag.C, Tag.D);
EnumSet<Tag> inter = EnumSet.copyOf(x);
inter.retainAll(y);
System.out.println("intersection: " + inter);
}
}Pengujian Keanggotaan
contains hanya memeriksa satu bit, sehingga waktu eksekusinya konstan dan sangat cepat.
import java.util.EnumSet;
public class Main {
enum Feature { DARK_MODE, BETA, ANALYTICS }
public static void main(String[] args) {
EnumSet<Feature> enabled = EnumSet.of(Feature.DARK_MODE, Feature.BETA);
System.out.println(enabled.contains(Feature.BETA));
System.out.println(enabled.contains(Feature.ANALYTICS));
}
}EnumSet sebagai Pengganti Tanda
Sebelum EnumSet, pemrogram menggunakan tanda bit int seperti READ | WRITE. EnumSet menggantikannya dengan keamanan tipe dan keterbacaan.
Anda mendapatkan kinerja bidang bit tanpa operasi masking manual yang rentan kesalahan.
import java.util.EnumSet;
import java.util.Set;
public class Main {
enum Style { BOLD, ITALIC, UNDERLINE }
static void render(Set<Style> styles) {
System.out.println("Applying: " + styles);
}
public static void main(String[] args) {
render(EnumSet.of(Style.BOLD, Style.UNDERLINE));
}
}Iterasi dalam Urutan Deklarasi
EnumSet melakukan iterasi dalam urutan alami konstanta, yaitu urutan deklarasinya.
Ini memberikan iterasi yang dapat diprediksi dan stabil, tidak seperti HashSet.
import java.util.EnumSet;
public class Main {
enum Phase { ALPHA, BETA, RC, GA }
public static void main(String[] args) {
EnumSet<Phase> set = EnumSet.of(Phase.GA, Phase.ALPHA, Phase.RC);
for (Phase p : set) System.out.println(p);
}
}Salinan Protektif dengan copyOf
EnumSet.copyOf(collection) membuat EnumSet dari koleksi nilai enumerasi apa pun. Gunakan ini untuk membuat salinan yang aman atau mengonversi List.
import java.util.EnumSet;
import java.util.List;
public class Main {
enum Role { ADMIN, EDITOR, VIEWER }
public static void main(String[] args) {
List<Role> source = List.of(Role.EDITOR, Role.VIEWER);
EnumSet<Role> roles = EnumSet.copyOf(source);
System.out.println(roles);
}
}Mengapa Ini Cepat
Untuk enumerasi dengan paling banyak 64 konstanta, EnumSet menggunakan satu long sebagai vektor bit. Setiap operasi hanya memerlukan satu atau dua instruksi mesin.
Selalu pilih EnumSet daripada HashSet<MyEnum> untuk himpunan enumerasi.
import java.util.EnumSet;
public class Main {
enum Bit { B0, B1, B2, B3 }
public static void main(String[] args) {
EnumSet<Bit> s = EnumSet.of(Bit.B0, Bit.B2);
// contains is a single bit-and under the hood
System.out.println(s.contains(Bit.B2));
}
}Pemeriksaan Cepat
Uji pengetahuan Anda tentang EnumSet.
Ringkasan
Anda telah mempelajari EnumSet:
Setbervektor bit untuk enumerasi, sangat cepat dan ringkas.- Pabrik:
of,allOf,noneOf,range,complementOf,copyOf. - Melakukan iterasi dalam urutan deklarasi.
- Pengganti aman bertipe untuk tanda bit int.
Berikutnya, tipe peta yang sesuai: EnumMap.
import java.util.EnumSet;
public class Main {
enum X { A, B }
public static void main(String[] args) {
System.out.println("EnumSet recap: " + EnumSet.allOf(X.class));
}
}Pertanyaan yang Sering Diajukan
Apakah pelajaran “EnumSet” gratis?
Ya — teks lengkap “EnumSet” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Java Academy, upgrade ke CoddyKit PRO. Kursus Java Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “EnumSet”?
Operasi set yang cepat pada enum. Kamu berlatih Java Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Java Academy?
Tidak diperlukan pengalaman sebelumnya. Java Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “EnumSet” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Java Academy ini?
Ya. Setiap pelajaran Java Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.