Kata pengantar
Dalam contoh kode analisis kumpulan koneksi database, Anda dapat melihat bahwa Enumerasi digunakan untuk menelusuri koleksi Vektor. Kemudian, saya mencari beberapa informasi untuk melihat metode apa yang dapat digunakan untuk melintasi kelas koleksi. Saya menemukan contoh berikut di Internet tentang penggunaan Enumerasi dan Iterator untuk melintasi kelas koleksi. Namun, contoh ini menyebutkan bahwa Enumerasi lebih efisien daripada Iterator. Faktanya, pengujian waktu dalam contoh ini terlalu sepihak karena jumlah datanya terlalu kecil. Seiring bertambahnya jumlah data, efisiensi antara keduanya menjadi semakin dekat, tanpa muncul rasio kelipatan. Selain itu, Iterator sekarang umum digunakan untuk melintasi kelas koleksi. Hanya kelas yang secara khusus menyatakan bahwa Enumerasi harus digunakan yang akan menggunakan kelas ini untuk melintasi koleksi.
Contoh kode
Copy kode kodenya sebagai berikut:
paket edu.sjtu.erplab.hash;
import java.util.Enumeration;
import java.util.Hashtable;
impor java.util.Iterator;
import java.util.Map.Entry;
//Contoh tabel hash traversal
kelas publik TraveseHashTable {
public static void main(String[] args) {
//Inisialisasi dan buat tabel hash
Hashtable<String, String> ht = Hashtable baru<String, String>();
untuk (int saya = 0; saya < 10000; saya++) {
ht.put("Kunci=" + saya, "Val=" + saya);
}
// 1. Gunakan Pencacahan
mulai panjang = System.currentTimeMillis();
Pencacahan<String> en = ht.keys();//Gunakan pencacahan untuk mendapatkan kunci
while (en.hasMoreElements()) {
en.nextElement();
}
ujung panjang = Sistem.currentTimeMillis();
System.out.println("Biaya kunci enumerasi" + (akhir - awal)
+ " milidetik");
// 2. Gunakan Pencacahan
mulai = Sistem.currentTimeMillis();
Enumeration<String> en2 = ht.elements();//Gunakan enumerasi untuk mendapatkan pasangan nilai kunci ini
while (en2.hasMoreElements()) {
en2.nextElement();
}
end = Sistem.currentTimeMillis();
System.out.println("Elemen enumerasi biaya " + (akhir - awal)
+ " milidetik");
// 3. Iterator
mulai = Sistem.currentTimeMillis();
Iterator<String> it = ht.keySet().iterator();//Gunakan iterator untuk mendapatkan kunci ini
sementara (itu.hasNext()) {
itu.berikutnya();
}
end = Sistem.currentTimeMillis();
System.out.println("Biaya Iterator keySet " + (akhir - mulai)
+ " milidetik");
// 4. Iterator
mulai = Sistem.currentTimeMillis();
Iterator<Entry<String, String>> it2 = ht.entrySet().iterator();//Gunakan iterator untuk mendapatkan pasangan nilai kunci ini
sementara (it2.hasNext()) {
it2.berikutnya();
}
end = Sistem.currentTimeMillis();
System.out.println("Entri IteratorSet biaya " + (akhir - mulai)
+ " milidetik");
}
}
Antarmuka yang tidak digunakan lagi: Pencacahan
Antarmuka Enumerasi diperkenalkan di JDK 1.0 dan merupakan antarmuka keluaran iterasi terbaik. Ketika Vector pertama kali digunakan (ArrayList sekarang direkomendasikan), antarmuka Enumerasi digunakan untuk keluaran. Meskipun Enumerasi adalah kelas lama, kelas Enumerasi diperluas setelah JDK1.5 untuk menambahkan aplikasi operasi umum.
Metode yang umum digunakan pada antarmuka Enumeration mencakup hasMoreElements() (untuk menentukan apakah ada nilai berikutnya) dan nextElement() (untuk menghapus elemen saat ini). Fungsi metode ini mirip dengan Iterator, kecuali ada metode untuk melakukannya menghapus data di Iterator, tetapi antarmuka ini tidak memiliki penghapusan.
Mengapa terus menggunakan antarmuka Enumerasi?
Antarmuka Enumeration dan Iterator memiliki fungsi serupa, dan Iterator memiliki lebih banyak fungsi daripada Enumeration, jadi mengapa menggunakan Enumeration? Hal ini dikarenakan perkembangan Java telah melalui waktu yang lama, dan beberapa sistem atau metode lama di perpustakaan kelas masih menggunakan antarmuka Enumeration, sehingga untuk kompatibilitas, Enumeration masih perlu digunakan.
Subkelas umum antarmuka Daftar
Subkelas antarmuka Daftar yang umum digunakan mencakup ArrayList dan Vector. Keduanya memiliki banyak kesamaan.