Apa perbedaan antara Koleksi dan Daftar di Jawa?

153

Apa perbedaan antara Collectiondan Listdi Jawa? Kapan saya harus menggunakan yang mana?

Truong Ha
sumber
Daftar antarmuka publik memperluas Koleksi {}
rai.skumar

Jawaban:

263

Pertama: a Listadalah a Collection. Namun, ini adalah spesialisasi Collection.

A Collectionhanya itu: koleksi barang. Anda dapat menambahkan barang, menghapus barang, beralih di atas barang, dan menanyakan berapa banyak barang di sana.

A Listmenambahkan informasi tentang urutan barang yang ditentukan untuknya: Anda bisa mendapatkan elemen di posisi n , Anda dapat menambahkan elemen di posisi n , Anda dapat menghapus elemen di posisi n .

Dalam CollectionAnda tidak dapat melakukan itu: "elemen ke-5 dalam koleksi ini" tidak ditentukan, karena tidak ada urutan yang ditentukan.

Ada Koleksi khusus lainnya juga, misalnya Setyang menambahkan fitur yang tidak akan pernah mengandung elemen yang sama dua kali.

Joachim Sauer
sumber
9
ya, daftar adalah spesialisasi koleksi yang dipesan (tetapi tidak diurutkan) +1
atamanroman
2
Daftar di java memperluas antarmuka Koleksi dan membangun fungsi yang diindeks yang membantu dalam pengambilan berdasarkan posisi dan perilaku penghapusan
frictionlesspulley
188

Collectionadalah antarmuka root ke hierarki java Koleksi. Listadalah salah satu sub antarmuka yang mendefinisikan Koleksi yang diurutkan, sub antarmuka lainnya Queueyang biasanya akan menyimpan elemen yang siap diproses (misalnya tumpukan ).

Diagram berikut menunjukkan hubungan antara berbagai jenis koleksi java:

koleksi java

Krock
sumber
1
Benar-benar menyukai gambar Anda, saya sudah melihatnya saat mempersiapkan SCJP tetapi hampir melupakan semua hal itu hari ini.
Truong Ha
1
Saya harus mengakui bahwa gambar ini diambil dari blog ini . Saya juga pertama kali melihat diagram seperti ini di buku K&B SCJP .
Krock
Anda dapat belajar banyak dari scjp cert, sebagian besar buku dengan topik ini luar biasa :)
atamanroman
Saya kira Mapbukan Collection.
giannis christofakis
7

API Java adalah yang terbaik untuk menjawab ini

Koleksi

Antarmuka root dalam hierarki koleksi. Koleksi mewakili sekelompok objek, yang dikenal sebagai elemen-elemennya. Beberapa koleksi memungkinkan elemen duplikat dan yang lain tidak. Beberapa dipesan dan yang lainnya tidak teratur. JDK tidak menyediakan implementasi langsung dari antarmuka ini: ia menyediakan implementasi subinterfaces yang lebih spesifik seperti Set and List. Antarmuka ini biasanya digunakan untuk meneruskan koleksi dan memanipulasi mereka di mana generalisasi maksimum diinginkan.

Daftar (Koleksi yang diperluas)

Koleksi yang dipesan (juga dikenal sebagai urutan). Pengguna antarmuka ini memiliki kontrol yang akurat atas di mana dalam daftar setiap elemen dimasukkan. Pengguna dapat mengakses elemen dengan indeks integer mereka (posisi dalam daftar), dan mencari elemen dalam daftar.

Tidak seperti set, daftar biasanya memungkinkan elemen duplikat. Lebih formal, daftar biasanya memungkinkan pasangan elemen e1 dan e2 sedemikian rupa sehingga e1.equals (e2), dan mereka biasanya memungkinkan beberapa elemen null jika mereka mengizinkan elemen nol sama sekali. Tidak dapat dibayangkan bahwa seseorang mungkin ingin menerapkan daftar yang melarang duplikat, dengan melemparkan pengecualian runtime ketika pengguna mencoba memasukkannya, tetapi kami berharap penggunaan ini jarang terjadi.

Eugene Ryzhikov
sumber
3

Daftar dan Set adalah dua subclass dari Koleksi.

Dalam Daftar, data dalam urutan tertentu.

Di Set, itu tidak bisa berisi data yang sama dua kali.

Di Collection, ia hanya menyimpan data tanpa urutan tertentu dan dapat berisi data duplikat.

Neeraj Bansal
sumber
2

Collection adalah antarmuka tingkat tinggi yang mendeskripsikan objek Java yang dapat berisi koleksi objek lain. Tidak terlalu spesifik tentang bagaimana mereka diakses, apakah banyak salinan dari objek yang sama dapat ada dalam koleksi yang sama, atau apakah urutannya penting. Daftar adalah kumpulan objek yang dipesan secara khusus . Jika Anda memasukkan objek ke dalam Daftar dalam urutan tertentu, mereka akan tetap dalam urutan itu.

Dan memutuskan di mana harus menggunakan kedua antarmuka ini jauh lebih penting daripada memutuskan apa implementasi konkret yang Anda gunakan. Ini akan memiliki implikasi untuk kinerja waktu dan ruang program Anda. Misalnya, jika Anda ingin daftar, Anda bisa menggunakan ArrayList atau LinkedList, yang masing-masing akan memiliki implikasi untuk aplikasi. Untuk jenis koleksi lain (misalnya Perangkat), pertimbangan serupa berlaku.

Gian
sumber
2

Koleksi adalah antarmuka Super Daftar sehingga setiap daftar Java juga merupakan contoh koleksi. Koleksi hanya dapat diulang secara berurutan (dan tanpa urutan tertentu) sedangkan Daftar memungkinkan akses ke elemen pada posisi tertentu melalui get(int index)metode ini.

Daff
sumber
2

Collection adalah antarmuka utama dari hirarki Java Collections dan List (Sequence) adalah salah satu sub interface yang mendefinisikan koleksi yang diurutkan.

Ramya
sumber