Salah satu alasan mengapa kelas-kelas pemrograman tahun pertama menggunakan array adalah warisan: itulah bagaimana para profesor awalnya mempelajarinya sebelum kita mulai menggunakan perpustakaan standar dengan daftar dinamis dimasukkan. Menggunakan tipe data primitif juga lebih umum berlaku: array ada di hampir semua komputer bahasa di bawah matahari (dan dapat diimplementasikan dalam beberapa instruksi perakitan). Ketika saya pertama kali belajar pemrograman, mengimplementasikan daftar tertaut adalah salah satu tugas.
Jauh lebih mudah untuk memulai dari prinsip pertama dan kemudian berkata "Itu struktur dasar. Bahasa ini (atau perpustakaannya) memberi Anda struktur data tingkat tinggi ini yang melakukan semua itu, tetapi memberi Anda x, y, dan z," daripada itu untuk mengatakan "Jadi itu struktur data tingkat tinggi ini, sekarang di sini apa yang ada di balik tudung." Mempelajari alasan untuk menggunakan LinkedList vs. ArrayList (atau HashSet vs. TreeSet) biasanya merupakan kursus Algoritma tahun kedua atau ketiga. Daftar dan Peta memiliki antarmuka yang sama dan memberikan hasil yang sama, tetapi dapat memiliki perilaku yang berbeda secara dramatis dalam aplikasi ukuran apa pun. Dan begitu Anda keluar dari Pemrograman 101, tidak ada jaminan bahwa Pemrograman 102 akan menggunakan bahasa yang sama. Jika Anda mulai dari konsep array, Anda bisa mengatakan "
Alasan lain untuk memilih "array" daripada "Daftar" dalam kursus pengantar adalah bahwa array pada dasarnya mudah dipahami: Array 20 bytes
membutuhkan 20 byte (ditambah pasangan untuk menunjukkan akhir array atau panjangnya, tergantung pada implementasi ).
"Daftar" adalah ketel ikan yang sama sekali berbeda dan dapat diimplementasikan dengan berbagai cara (ArrayList, LinkedList, dan mungkin pasangan yang saya lupa), dengan karakteristik kinerja yang berbeda secara fundamental. Tanpa memahami keberanian dari apa kelas Daftar berbeda lakukan, Anda tidak dapat memiliki diskusi bermakna ketika Anda harus menggunakan List foo = new ArrayList()
vs List foo = new LinkedList()
. Jika Anda mencoba membuat siswa menggunakan implementasi Daftar, seseorang akan bertanya mengapa Anda menggunakan ArrayList alih-alih salah satu implementasi lainnya. Dan "ArrayList" termasuk kata "Array" dan didukung oleh satu, jadi itu sebenarnya bukan lompatan logika besar dari "array" ke "ArrayList".
Berlawanan dengan kepercayaan populer, ADA situasi di mana masuk akal untuk menggunakan array di Daftar, terutama ketika Anda berurusan dengan daftar ukuran statis. Berikut adalah pasangannya:
- Pencarian dan pengulangan sedikit lebih cepat karena Anda tidak berurusan dengan overhead pemanggilan metode:
foo[n]
dereferensi dan melakukan beberapa aritmatika penunjuk di belakang layar, sementara foo.get(n)
harus melakukan dereferensi, melakukan pemanggilan metode, melakukan dereferensi kedua, dan kemudian mungkin melakukan aritmatika penunjuk (jika Anda menggunakan ArrayList; LinkedLists berpotensi perlu mengulangi setiap elemen Daftar).
- Inisialisasi jauh lebih bersih:
int[] foo = new int[]{1, 2, 3, 4, 5}
vs saran dalam pertanyaan StackOverflow lain