Penelitian utama dalam artikel ini adalah konten ENUMMAP yang relevan alih -alih indeks ordinal di Java, yang diperkenalkan sebagai berikut.
Catatan Studi "Edisi Cina Java Efektif 2"
Sering ditemui menggunakan metode ordinal Enum untuk mengindeks jenis enum.
herba kelas publik {public enum type {tahunan, abadi, dua tahunan}; nama string final pribadi; Jenis Tipe Akhir Pribadi; Herb (nama string, type type) {this.name = name; this.type = type; } @Override public string toString () {return name; }}Sekarang anggaplah ada serangkaian ramuan yang mewakili tanaman di kebun yang ingin Anda atur berdasarkan jenis (tahunan, abadi, atau dua tahunan) sebelum mendaftarkan tanaman ini. Jika Anda ingin melakukan ini, Anda perlu membangun tiga set, satu untuk setiap jenis, dan beralih melalui seluruh taman dan menempatkan setiap ramuan ke dalam set yang sesuai. Beberapa programmer melakukan ini dengan memasukkan set ini ke dalam array yang diindeks oleh jumlah tipe ordinal.
// Menggunakan ordinal () untuk mengindeks array - jangan lakukan thisherb [] garden = ...; // diindeks oleh herb.type.ordinal () set <herb> [] herbsbytype = (set <herb> []) set baru [herb.type.values (). Panjang]; untuk (int i = 0; i <herbsbytype.length; i ++) {herbsbyType [i] = hashset baru <herb> ();} for (herb h: garden) {herbsbyType [h.type.ordinal (). add (h);} // cetak hasil (int i = 0; i <). System.out.printf ("%s:%s%n", herb.type.values () [i], herbsbyType [i]);}Metode ini memang layak, tetapi menyembunyikan banyak masalah. Karena array tidak kompatibel dengan obat generik. Program perlu melakukan konversi yang tidak terkendali dan tidak dapat dikompilasi dengan benar. Karena array tidak tahu apa yang diwakili indeksnya, Anda harus secara manual memberi label output dari indeks ini. Tetapi masalah yang paling serius dengan metode ini adalah ketika Anda mengakses array yang diindeks oleh nomor ordinal enum, adalah tanggung jawab Anda untuk menggunakan nilai int yang benar; int tidak dapat memberikan keamanan jenis untuk enum. Jika Anda menggunakan nilai yang salah, program ini akan diam -diam menyelesaikan pekerjaan yang salah, atau jika Anda beruntung, itu akan melempar ArrayIndExoutOfBoundException Exception.
java.util.enummap adalah implementasi peta yang sangat cepat yang secara khusus digunakan untuk enumerasi.
// Menggunakan enummap untuk mengaitkan data dengan enummap <herb.type, atur <herb>> herbsbyType = new enummap <herb.type, atur <herb>> (herb.type.class); untuk (herb.type t: herb.type.values) herbsbytype.put (t, hashset baru <herb> ()); untuk (herb h: garden) herbsbytype.get (h.type) .add (h); system.out.println (herbsbyType);
Program ini lebih pendek, lebih jelas, dan lebih aman, dan dapat berjalan dengan kecepatan yang sebanding dengan program yang menggunakan bilangan ordinal. Tidak memiliki konversi yang tidak aman; Itu tidak harus memberi label output dari indeks ini secara manual, karena kunci pemetaan tahu bagaimana menerjemahkan diri mereka ke dalam enumerasi string yang dapat dicetak; Juga tidak mungkin untuk membuat kesalahan saat menghitung indeks array . Alasan mengapa ENUMMAP sebanding dengan array yang diindeks melalui indeks ordinal dalam hal kecepatan berjalan adalah bahwa Enummap menggunakan array ini secara internal. Tapi itu menyembunyikan detail pemikiran semacam ini dari programmer, menggabungkan fungsionalitas kaya peta dan jenis keamanan dengan kecepatan array. Perhatikan bahwa konstruktor enummap menggunakan objek kelas jenis kunci: Ini adalah token tipe terbatas yang menyediakan informasi generik runtime.
Meringkaskan
Di atas adalah semua penjelasan terperinci dari enummap alih -alih kode indeks ordinal di java. Saya harap ini akan membantu semua orang. Teman yang tertarik dapat terus merujuk ke topik terkait lainnya di situs ini. Jika ada kekurangan, silakan tinggalkan pesan untuk menunjukkannya. Terima kasih teman atas dukungan Anda untuk situs ini!