Pertama -tama, kami melihat kedua kategori yang mengimplementasikan antarmuka daftar, dan ada tiga kelas implementasi dalam antarmuka daftar, yaitu ArrayList, Vector dan LinkedList. Daftar digunakan untuk menyimpan banyak elemen, dapat mempertahankan urutan elemen, dan memungkinkan pengulangan elemen.
Perbedaan yang relevan antara tiga kelas implementasi spesifik adalah sebagai berikut:
1. ArrayList adalah kelas implementasi daftar yang paling umum digunakan, diimplementasikan secara internal melalui array, yang memungkinkan akses acak cepat ke elemen. Kerugian array adalah bahwa tidak dapat ada spasi di antara setiap elemen. Ketika ukuran array tidak terpenuhi, kapasitas penyimpanan perlu ditingkatkan. Penting untuk mengatakan bahwa data dari array yang sudah disalin ke ruang penyimpanan baru. Saat memasukkan atau menghapus elemen dari posisi tengah daftar array, array perlu disalin, dipindahkan, dan biayanya relatif tinggi. Oleh karena itu, cocok untuk pencarian dan traversal acak, bukan untuk penyisipan dan penghapusan.
2.Vektor juga diimplementasikan melalui array, perbedaannya adalah bahwa ia mendukung sinkronisasi utas, yaitu, pada saat tertentu, hanya satu utas yang dapat menulis vektor untuk menghindari ketidakkonsistenan yang disebabkan oleh banyak tulisan utas pada saat yang sama, tetapi harganya banyak untuk mengimplementasikan sinkronisasi, sehingga mengaksesnya lebih lambat daripada mengakses daftar array.
3. LinkedList menggunakan struktur daftar tertaut untuk menyimpan data, yang sangat cocok untuk penyisipan dinamis dan penghapusan data, dan akses acak dan kecepatan traversal relatif lambat. Selain itu, ini juga menyediakan metode yang tidak didefinisikan dalam antarmuka daftar, yang secara khusus digunakan untuk mengoperasikan header tabel dan elemen ekor, dan dapat digunakan sebagai tumpukan, antrian dan antrian dua arah.
Melihat kode sumber Java, saya menemukan bahwa ketika ukuran array tidak cukup, saya perlu membuat kembali array dan kemudian menyalin elemen ke array baru. Ukuran array yang diperluas dari arraylist dan vektor berbeda.
ArrayList:
public boolean add (e e) {ensurecapacity (ukuran + 1); // Tambahkan elemen untuk menentukan apakah mereka dapat mengakomodasi mereka. Jika Anda tidak bisa, Anda harus membuat array elementData baru [size ++] = e; return true;} public void EnsureCapacity (int MinCapacity) {ModCount ++; int oldcapacity = elementData.length; if (Mincapacity> oldcapacity) {objek oldData [] = elementData; // Baris ini tidak menunjukkan kegunaan, saya tidak tahu apa yang dipikirkan pengembang tentang int newcapacity = (oldcapacity * 3)/2 + 1; // Tambahkan ukuran array baru jika (newcapacity <mintcapacity) newcapacity = MinCapacity; // MinCapacity biasanya mendekati ukuran, jadi ini adalah win: elementData = arrays.copyof (elementData, newcapacity); }}Di vektor:
private void EnsureCapacityHelper (int MinCapacity) {int oldcapacity = elementData.length; if (Minsapacity> oldcapacity) {objek [] oldData = elementData; int newcapacity = (capityIncrement> 0)? (Oldcapacity + CapasityIncrement): (Oldcapacity * 2); if (newcapacity <mintcapacity) {newcapacity = mintcapacity; } elementData = arrays.copyof (elementData, newcapacity); }}Perbedaan antara arraylist dan vektor adalah sebagai berikut:
ArrayList diperluas 50% + 1 secara default ketika ada memori yang tidak mencukupi, dan vektor diperluas 1 kali secara default.
Vektor menyediakan antarmuka IndexOf (OBJ, Start), tetapi ArrayList tidak.
Vektor berada pada tingkat keamanan utas, tetapi dalam kebanyakan kasus, vektor tidak digunakan karena keamanan utas membutuhkan overhead sistem yang lebih besar.
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.