Senarai susun atur dan senarai Terkait adalah istilah biasa apabila ia berkaitan dengan penyimpanan data dan pengambilan semula. Walaupun terdapat banyak peranti penyimpanan, akhirnya, mereka bergantung pada mekanisme penyimpanan. Kedua-dua mekanisme penyimpanan ini meletakkan data anda di dalam peranti storan dan mengambilnya apabila diperlukan. Mari kita lihat bagaimana mereka menyimpan data dalam memori mereka. Senarai Array menggunakan storan berjujukan, dan kepingan data disimpan satu demi satu. Ini mungkin bentuk simpanan yang lebih mudah - ia mengelakkan kekeliruan. Ya, kita dapat mengambil item atau data seterusnya dari lokasi memori berikutnya bagi senarai array; Walau bagaimanapun, ia disimpan dengan bantuan petunjuk dalam senarai Terkait. Di sini kita memerlukan dua lokasi memori untuk penyimpanan - satu untuk data, yang lain untuk penunjuk. Penunjuk alamat alamat memori data seterusnya. Kita boleh dengan mudah memahami bahawa Senarai yang Dihubungkan tidak menyimpan data secara berurutan; Sebaliknya, ia menggunakan mekanisme penyimpanan rawak. Petunjuk adalah elemen utama dalam mencari lokasi data dalam ingatan.
Kami telah membincangkan bagaimana kedua-dua mekanisme penyimpanan dimasukkan ke dalam data dan kami boleh memberikan istilah 'array dinamik' untuk skema simpanan dalaman Array. Ia hanya meletakkan kepingan data satu demi satu-kemudian nama - sedangkan senarai Terkait menggunakan senarai dalaman dengan bantuan petunjuk untuk menjejaki item seterusnya. Oleh itu, ia menggunakan senarai hubungan dalaman, seperti senarai hubungan tunggal atau dua kali ganda untuk menunjukkan kepada kami data seterusnya.
Oleh kerana senarai Array hanya menyimpan data sebenar, kami memerlukan ruang untuk data yang kami simpan. Sebaliknya, dalam senarai Terkait, kami juga menggunakan petunjuk. Oleh itu, dua lokasi ingatan diperlukan, dan kita boleh mengatakan bahawa senarai yang dikaitkan menggunakan lebih banyak memori daripada senarai Array. Sisi menguntungkan senarai Terkait adalah bahawa ia tidak memerlukan lokasi ingatan berterusan untuk menyimpan data kami, berbanding dengan senarai Array. Petunjuk mampu memegang kedudukan lokasi data seterusnya, dan kita juga boleh menggunakan slot memori yang lebih kecil yang tidak berterusan. Apabila menggunakan penggunaan memori, petunjuk memainkan peranan utama dalam senarai Terkait, dan juga keberkesanannya.
Dengan senarai Array, walaupun senarai kosong memerlukan saiz 10, tetapi dengan senarai Terkait, kami tidak memerlukan ruang yang besar sedemikian. Kita boleh membuat senarai Linked kosong dengan saiz 0. Kemudian, kita boleh meningkatkan saiz yang diperlukan.
Pengambilan data lebih mudah dalam senarai Array kerana ia menyimpan secara berurutan. Yang dilakukannya ialah mengenal pasti lokasi data pertama; dari sana, lokasi seterusnya akan diakses secara berurutan untuk mendapatkan rehat yang lain. Ia mengira seperti kedudukan data pertama + 'n', di mana 'n' adalah susunan data dalam senarai Array. Senarai Terkait merujuk penunjuk awal untuk mencari lokasi data pertama, dan dari sana ia merujuk penuding yang berkaitan dengan setiap data untuk mencari lokasi data seterusnya. Proses pengambilan bergantung kepada petunjuk di sini, dan mereka menunjukkan kepada kami lokasi data seterusnya.
Senarai Array menggunakan nilai nol untuk menandakan akhir data, sedangkan senarai Terkait menggunakan penunjuk null untuk tujuan ini. Sebaik sahaja sistem mengiktiraf data null, senarai Array menghentikan pengambilan data seterusnya. Dengan cara yang sama, penunjuk null menamatkan sistem daripada meneruskan pengambilan data seterusnya.
Senarai Terkait membolehkan kita melintasi arah belakang dengan bantuan descendingiterator (). Walau bagaimanapun, kami tidak mempunyai kemudahan sedemikian dalam senarai Array - traversal terbalik menjadi masalah di sini.
Marilah kita melihat Syntax Java kedua-dua mekanisme penyimpanan.
Penciptaan senarai Array:
Senarai arraylistsample = ArrayList baru ();
Menambah objek pada Senarai Array:
Arraylistsample.add ("name1");
Arraylistsample.add ("name2");
Inilah bagaimana senarai Array yang dihasilkan akan kelihatan seperti - [name1, name2].
Penciptaan senarai yang berkaitan:
Senarai linkedlistsample = linkedList baru ();
Menambah objek ke Senarai Berkaitan:
Linkedlistsample.add ("name3");
Linkedlistsample.add ("name4");
Inilah bagaimana senarai Linked yang dihasilkan akan kelihatan seperti - [name3, name4].
Senarai Array mengambil masa O (1) untuk menjalankan sebarang carian data, sedangkan senarai Terkait mengambil u O (n) untuk nth carian data. Oleh itu, senarai Array sentiasa menggunakan masa malar untuk sebarang carian data, tetapi dalam senarai Terkait, masa yang diambil bergantung pada kedudukan data. Oleh itu, senarai Array sentiasa menjadi pilihan yang lebih baik untuk operasi Dapatkan atau Cari.
Kedua-dua senarai Array dan Senarai Terkait mengambil masa O (1) untuk penambahan data. Tetapi jika array penuh, maka senarai Array mengambil banyak masa untuk mengubah saiznya dan menyalin item kepada yang baru. Dalam kes sedemikian, senarai Terkait adalah pilihan yang lebih baik.
Operasi keluarkan mengambil hampir jumlah masa yang sama dalam senarai Array dan senarai Terkait. Dalam senarai Array, operasi ini memadamkan data dan kemudian beralih kedudukan data untuk membentuk array yang lebih baru - ia mengambil masa O (n). Dalam senarai Terkait, operasi ini menyeberangi data tertentu dan mengubah kedudukan penunjuk untuk membentuk senarai yang lebih baru. Masa untuk traversal dan penyingkiran adalah O (n) di sini juga.
Kami tahu bahawa senarai Array menggunakan array dalaman untuk menyimpan data sebenar. Oleh itu, jika sebarang data dipadamkan, maka semua data yang akan datang memerlukan pergeseran memori. Jelas sekali, ini memerlukan banyak masa dan memperlahankan perkara-perkara. Peralihan ingatan sedemikian tidak diperlukan dalam senarai Terkait, kerana semua itu mengubah lokasi penunjuk. Oleh itu, senarai Terkait lebih pantas daripada senarai Array dalam apa jua jenis storan data. Walau bagaimanapun, ini semata-mata bergantung kepada jenis operasi, iaitu operasi Get atau Search, senarai Terluh mengambil lebih banyak masa daripada senarai Array. Apabila kita melihat prestasi keseluruhan, kita boleh mengatakan bahawa senarai Terkait lebih pantas.
Senarai Array paling sesuai untuk keperluan data yang lebih kecil di mana memori berterusan tersedia. Tetapi apabila kita berurusan dengan sejumlah besar data, ketersediaan memori berterusan melaksanakan mekanisme penyimpanan data, sama ada kecil atau besar. Seterusnya, tentukan siapa yang hendak dipilih - senarai Array atau senarai Terkait. Anda boleh meneruskan senarai array apabila anda hanya memerlukan penyimpanan dan pengambilan data. Tetapi senarai boleh membantu anda melampaui itu dengan memanipulasi data. Sebaik sahaja anda memutuskan seberapa kerap manipulasi data diperlukan, adalah penting untuk memeriksa jenis pengambilan data yang biasanya anda lakukan. Apabila ia hanya Dapatkan atau Cari, maka Senarai Array adalah pilihan yang lebih baik; untuk operasi lain seperti Penyisipan atau Pemadaman, teruskan dengan senarai Terkait.
Marilah kita melihat perbezaan dalam bentuk jadual.
S.No | Konsep | Perbezaan | |
Senarai Array | Senarai Terkait | ||
1 | Fesyen Penyimpanan Data | Menggunakan storan data berturut-turut | Menggunakan storan data tanpa urutan |
2 | Skim Penyimpanan Dalaman | Mengekalkan Array Dinamik dalaman | Mengekalkan senarai Terkait |
3 | Penggunaan memori | Memerlukan ruang ingatan hanya untuk data | Memerlukan ruang ingatan untuk data serta untuk petunjuk |
4 | Saiz Senarai Permulaan | Perlu ruang untuk sekurang-kurangnya 10 item | Tidak memerlukan ruang dan kami juga boleh membuat senarai saiz Terkait kosong 0. |
5 | Pengambilan Data | Kumpulkan seperti kedudukan data pertama + 'n', di mana 'n' adalah susunan data dalam senarai Array | Traversal dari yang pertama atau terakhir sehingga diperlukan data yang diperlukan |
6 | Akhir Data | Nilai Null menandakan akhir | Penunjuk Null menandakan berakhir |
7 | Reversal Traversal | Tidak membenarkannya | Membolehkannya dengan bantuan descendingiterator () |
8 | Senarai Syntax Penciptaan | Senarai arraylistsample = ArrayList baru ();
| Senarai linkedlistsample = linkedList baru ();
|
9 | Menambah Objek | Arraylistsample.add ("name1");
| Linkedlistsample.add ("name3");
|
10 | Dapatkan atau Cari | Mengambil masa O (1) dan lebih baik dalam prestasi | Membawa O (n) masa dan prestasi bergantung kepada kedudukan data |
11 | Masukkan atau Tambahan | Menggunakan masa O (1) kecuali apabila array penuh | Mengambil masa O (1) dalam semua keadaan |
12 | Pemadaman atau Pembuangan | Mengambil masa O (n) | Mengambil masa O (n) |
13 | Kapan Digunakan? | Apabila terdapat banyak operasi Get atau Search yang terlibat; ketersediaan memori harus lebih tinggi walaupun pada awalnya | Apabila terdapat banyak operasi Insert atau Hapus, dan ketersediaan memori tidak perlu berterusan |