Daftar array dan daftar Tertaut adalah istilah umum untuk penyimpanan dan pengambilan data. Meskipun ada banyak perangkat penyimpanan, pada akhirnya, mereka bergantung pada mekanisme penyimpanan. Dua mekanisme penyimpanan ini menempatkan data Anda di perangkat penyimpanan dan mengambilnya saat dibutuhkan. Mari kita lihat bagaimana mereka menyimpan data dalam memori mereka. Daftar Array menggunakan penyimpanan berurutan, dan potongan-potongan data disimpan satu demi satu. Ini mungkin bentuk penyimpanan yang lebih sederhana - ini menghindari kebingungan. Ya, kami dapat mengambil item atau data berikutnya dari lokasi memori selanjutnya dari daftar array; namun, ini disimpan dengan bantuan pointer dalam daftar Linked. Di sini kita membutuhkan dua lokasi memori untuk penyimpanan - satu untuk data, yang lainnya untuk penunjuk. Suatu pointer menunjuk lokasi memori dari data selanjutnya. Kita dapat dengan mudah memahami bahwa daftar Linked tidak pernah menyimpan data secara berurutan; melainkan menggunakan mekanisme penyimpanan acak. Pointer adalah elemen kunci dalam menemukan lokasi data dalam memori.
Kami telah membahas bagaimana kedua mekanisme penyimpanan dimasukkan ke dalam data dan kami dapat memberikan istilah 'array dinamis' untuk skema penyimpanan internal daftar Array. Itu hanya menempatkan potongan data satu demi satu - karena itu nama - sedangkan daftar Linked menggunakan daftar internal dengan bantuan pointer untuk melacak item berikutnya. Oleh karena itu, ia menggunakan daftar tertaut internal, seperti daftar tertaut tunggal atau ganda untuk menunjukkan kepada kita data selanjutnya.
Karena daftar Array hanya menyimpan data aktual, kita hanya perlu ruang untuk data yang kita simpan. Sebaliknya, dalam daftar Linked, kami juga menggunakan pointer. Oleh karena itu, diperlukan dua lokasi memori, dan kita dapat mengatakan bahwa daftar tertaut mengkonsumsi lebih banyak memori daripada daftar Array. Sisi menguntungkan dari daftar Linked adalah bahwa ia tidak pernah memerlukan lokasi memori terus menerus untuk menyimpan data kami, sebagai lawan dari daftar Array. Pointer mampu menahan posisi lokasi data berikutnya, dan kita bahkan dapat menggunakan slot memori yang lebih kecil yang tidak kontinu. Ketika datang ke penggunaan memori, pointer memainkan peran utama dalam daftar Linked, dan begitu juga efektivitas mereka.
Dengan daftar Array, bahkan daftar kosong membutuhkan ukuran 10, tetapi dengan daftar Linked, kita tidak membutuhkan ruang yang begitu besar. Kita dapat membuat daftar Linked kosong dengan ukuran 0. Kemudian, kita dapat meningkatkan ukuran sesuai kebutuhan.
Pengambilan data lebih mudah dalam daftar Array karena menyimpan berurutan. Yang dilakukannya hanyalah mengidentifikasi lokasi data pertama; dari sana, lokasi berikutnya diakses secara berurutan untuk mengambil sisanya. Itu menghitung seperti posisi data pertama + 'n', di mana 'n' adalah urutan data dalam daftar Array. Daftar Tertaut merujuk penunjuk awal untuk menemukan lokasi data pertama, dan dari sana merujuk penunjuk yang terkait dengan setiap data untuk menemukan lokasi data berikutnya. Proses pengambilan terutama tergantung pada petunjuk di sini, dan mereka secara efektif menunjukkan lokasi data berikutnya.
Daftar Array menggunakan nilai nol untuk menandai akhir data, sedangkan daftar Linked menggunakan pointer nol untuk tujuan ini. Segera setelah sistem mengenali data nol, daftar Array menghentikan pengambilan data berikutnya. Dengan cara yang sama, penunjuk nol menghentikan sistem dari melanjutkan ke pengambilan data berikutnya.
Daftar Tertaut memungkinkan kita untuk melintasi arah sebaliknya dengan bantuan descendingiterator (). Namun, kami tidak memiliki fasilitas seperti itu dalam daftar Array - reverse traversal menjadi masalah di sini.
Mari kita lihat Sintaks Java dari kedua mekanisme penyimpanan.
Pembuatan daftar array:
List arraylistsample = new ArrayList ();
Menambahkan objek ke Daftar Array:
Arraylistsample.add ("name1");
Arraylistsample.add ("name2");
Ini adalah bagaimana daftar Array yang dihasilkan akan terlihat seperti - [name1, name2].
Pembuatan daftar yang ditautkan:
List linkedlistsample = new linkedList ();
Menambahkan objek ke Daftar Tertaut:
Linkedlistsample.add ("name3");
Linkedlistsample.add ("name4");
Ini adalah bagaimana daftar Linked resultan akan terlihat seperti - [name3, name4].
Daftar Array membutuhkan O (1) waktu untuk menjalankan pencarian data apa pun, sedangkan daftar Tertaut membutuhkan u O (n) untukth pencarian data. Oleh karena itu, daftar Array selalu menggunakan waktu yang konstan untuk setiap pencarian data, tetapi dalam daftar Linked, waktu yang diambil tergantung pada posisi data. Oleh karena itu, daftar Array selalu merupakan pilihan yang lebih baik untuk operasi Dapatkan atau Pencarian.
Baik daftar Array dan Daftar Tertaut membutuhkan O (1) waktu untuk penambahan data. Tetapi jika array penuh, maka daftar Array membutuhkan banyak waktu untuk mengubah ukurannya dan menyalin item ke yang lebih baru. Dalam kasus seperti itu, daftar Linked adalah pilihan yang lebih baik.
Operasi hapus memakan waktu yang hampir sama di daftar Array dan Linked. Dalam daftar Array, operasi ini menghapus data dan kemudian menggeser posisi data untuk membentuk array yang lebih baru - ini membutuhkan waktu O (n). Dalam daftar Tertaut, operasi ini melintasi ke data tertentu dan mengubah posisi penunjuk untuk membentuk daftar yang lebih baru. Waktu untuk traversal dan pemindahan adalah O (n) di sini juga.
Kita tahu bahwa daftar Array menggunakan array internal untuk menyimpan data aktual. Karena itu, jika ada data yang dihapus, maka semua data yang akan datang membutuhkan perubahan memori. Jelas, ini membutuhkan banyak waktu dan memperlambat segalanya. Pergeseran memori seperti itu tidak diperlukan dalam daftar Linked, karena yang dilakukannya hanyalah mengubah lokasi pointer. Oleh karena itu, daftar Linked lebih cepat daripada daftar Array dalam segala jenis penyimpanan data. Namun, ini sepenuhnya tergantung pada jenis operasi, mis. Untuk operasi Dapatkan atau Pencarian, daftar Tertaut membutuhkan lebih banyak waktu daripada daftar Array. Ketika kita melihat kinerja keseluruhan, kita dapat mengatakan bahwa daftar Linked lebih cepat.
Daftar Array paling cocok untuk persyaratan data yang lebih kecil di mana memori terus menerus tersedia. Tetapi ketika kita berurusan dengan data dalam jumlah besar, ketersediaan memori kontinu mengimplementasikan mekanisme penyimpanan data, apakah itu kecil atau besar. Selanjutnya, tentukan yang mana yang akan dipilih - daftar Array atau daftar Linked. Anda dapat melanjutkan dengan daftar array ketika Anda hanya perlu penyimpanan dan pengambilan data. Tetapi daftar dapat membantu Anda lebih dari itu dengan memanipulasi data. Setelah Anda memutuskan seberapa sering manipulasi data diperlukan, penting untuk memeriksa jenis pengambilan data yang biasanya Anda lakukan. Ketika hanya Dapatkan atau Cari, maka Daftar Array adalah pilihan yang lebih baik; untuk operasi lain seperti Penyisipan atau Penghapusan, lanjutkan dengan daftar Linked.
Mari kita lihat perbedaan dalam bentuk tabel.
S.Tidak | Konsep | Perbedaan | |
Daftar Array | Daftar Tertaut | ||
1 | Mode Penyimpanan Data | Menggunakan penyimpanan data berurutan | Menggunakan penyimpanan data non-sekuensial |
2 | Skema Penyimpanan Internal | Mempertahankan Dynamic Array internal | Mempertahankan daftar Tertaut |
3 | Penggunaan Memori | Membutuhkan ruang memori hanya untuk data | Membutuhkan ruang memori untuk data juga untuk pointer |
4 | Ukuran Daftar Awal | Membutuhkan ruang untuk setidaknya 10 item | Tidak membutuhkan ruang dan kami bahkan dapat membuat daftar Linked ukuran kosong 0. |
5 | Penerimaan data | Menghitung seperti posisi data pertama + 'n', di mana 'n' adalah urutan data dalam daftar Array | Traversal dari yang pertama atau terakhir hingga data yang diperlukan diperlukan |
6 | Akhir Data | Nilai Null menandai akhir | Null Pointer menandai akhirnya |
7 | Membalikkan Traversal | Tidak mengizinkannya | Mengizinkannya dengan bantuan descendingiterator () |
8 | Daftar Sintaks Pembuatan | List arraylistsample = new ArrayList ();
| List linkedlistsample = new linkedList ();
|
9 | Menambahkan Objek | Arraylistsample.add ("name1");
| Linkedlistsample.add ("name3");
|
10 | Dapatkan atau Cari | Membutuhkan O (1) waktu dan kinerjanya lebih baik | Membutuhkan O (n) waktu dan kinerja tergantung pada posisi data |
11 | Sisipkan atau Tambahan | Membutuhkan O (1) waktu kecuali ketika array penuh | Membutuhkan O (1) waktu dalam semua keadaan |
12 | Penghapusan atau Penghapusan | Membutuhkan O (n) waktu | Membutuhkan O (n) waktu |
13 | Kapan Harus Digunakan? | Ketika ada banyak operasi Dapatkan atau Pencarian yang terlibat; ketersediaan memori harus lebih tinggi bahkan di awal | Ketika ada banyak operasi Sisipkan atau Hapus, dan ketersediaan memori tidak perlu berkelanjutan |