Kelas apa yang digunakan untuk ArrayList?

Saya hanya ingin mengklarifikasi pertanyaan yang saya miliki beberapa waktu ini untuk kode yang lebih efisien dan 'benar'.

Saya memberikan kelas 'Siswa' dengan objek dalam daftar objek array. Saya memiliki kelas lain bernama Kelas yang memiliki daftar array referensi ke objek yang sama di kelas Siswa.

Haruskah saya mendeklarasikan kelas 'Kelas' sebagai

ArrayList<Student> myStudents = new ArrayList<Student>();

or

ArrayList<Class> myStudents = new ArrayList<Class>();

Juga bagian lain dari pertanyaannya adalah saya telah melihat orang mendeklarasikan arrayLists sebagai ArrayList<Student> myStudents = new ArrayList<>(); di mana paruh kedua wortel dibiarkan kosong. Apa sebenarnya arti perbedaannya? Apakah ini berarti daftar array bukan objek kelas mana pun?

Terima kasih banyak atas waktu dan bantuannya Cheers


person eArshdeep    schedule 12.11.2016    source sumber
comment
Wortel????????? xaxaxa epic!.Maksudmu operator berlian . Lihat: stackoverflow.com/questions/4166966/   -  person GOXR3PLUS    schedule 12.11.2016
comment
Saya ingat pernah menonton video beberapa waktu yang lalu dan seseorang menyebutnya sebagai wortel dan menambahkan bahwa itu kontroversial atau semacamnya. Saya tidak peduli untuk mencari istilah yang benar sekarang karena saya sibuk dengan ini. Bagaimanapun, aku mengerti betapa bodohnya hal ini membuatku terlihat :}   -  person eArshdeep    schedule 12.11.2016
comment
Aku tidak bermaksud begitu, itu lucu sekali :)   -  person GOXR3PLUS    schedule 12.11.2016
comment
Jadi, dalam List‹String› list = new LinkedList‹›(); apa itu LinkedList? Bagaimana Anda bisa mendapatkan hal seperti itu?   -  person eArshdeep    schedule 12.11.2016
comment
Dan di ArrayList‹Class› myStudents = new ArrayList‹Class›(); apakah ini objek kelas ArrayList atau kelas 'Kelas'   -  person eArshdeep    schedule 12.11.2016


Jawaban (2)


Itu tergantung pada apa yang ingin Anda simpan dalam daftar dan bukan di mana Anda menggunakannya. Jika Anda menyimpan objek Siswa, Anda akan menggunakan ArrayList<Student>().

Tipe yang dihilangkan di sisi kanan disebut tipe inferensi (ditambahkan di Java 7), yang berarti parameter tipe di sisi kanan akan disimpulkan dari tipe variabel penugasan di sebelah kiri. Ini membantu untuk menulis kode dengan cara yang lebih bersih. Misalnya.

Menulis di bawah ini lebih mudah:

List<Some<Type<Another>>> var = new ArrayList<>();

dibandingkan:

List<Some<Type<Another>>> var = new ArrayList<Some<Type<Another>>>();
person Gurwinder Singh    schedule 12.11.2016

Secara teknis, tidak keduanya.

Anda ingin melakukan:

List<Student> myStudents = new ArrayList<>();

jika Anda ingin membuat ArrayList dengan Student objek dan

List<Class> myClasses = new ArrayList<>();

jika Anda ingin membuat ArrayList dengan Class objek.

1) Catat nama variabelnya.

2) Perhatikan bahwa Anda harus selalu mencoba membuat kode ke antarmuka (sisi kiri adalah List, bukan ArrayList). Hal ini memungkinkan fleksibilitas yang jauh lebih besar karena Anda tidak bergantung pada penerapan spesifik ArrayList di kemudian hari. Poin ini sangat ampuh! Anda dapat menulis tanda tangan metode untuk menerima objek bertipe List dan kemudian menggunakan ArrayList, LinkedList atau Stack atau kelas apa pun yang mengimplementasikan List. Bergantung pada bagaimana Anda menggunakan ArrayList nanti, antarmuka Collection mungkin sudah cukup.

Operator berlian memungkinkan kompiler menyimpulkan nilai argumen tipe tanpa harus mengetikkan semuanya. Ini diperlukan untuk kompatibilitas ke belakang untuk versi Java yang lebih lama.

Sebagai praktik umum untuk pengoptimalan kinerja, Anda juga ingin menyediakan kapasitas awal sebesar ArrayList jika memungkinkan. Jadi jika Anda mengetahui bahwa hanya ada 5 kelas, maka Anda akan melakukan:

List<Class> myClasses = new ArrayList<>(5);
person vphilipnyc    schedule 12.11.2016