Ini untuk koleksi yang dipesan misalnya java.util.List. Mengapa perancang bahasa tidak memasukkan metode terakhir? Satu-satunya alasan yang dapat saya pikirkan adalah:
- ambiguitas ketika koleksi kosong (mengembalikan nol atau melempar pengecualian)
- API mengasapi
Ada alasan lain?
java
api-design
tiga cangkir
sumber
sumber
collection.get(collection.size() - 1)
.Jawaban:
API mengasapi mungkin jawabannya. Dari pengalaman saya, satu-satunya saat saya membutuhkan fungsi ini, Antrian atau Stack adalah struktur data yang benar untuk pekerjaan yang memiliki metode yang sesuai.
sumber
get(-1)
untuk mengambil dari akhir daftar itu akan melakukan apa yang diinginkan OP tanpa menambahkan API mengasapi. Jawaban saya telah menarik downvotes yang tidak dapat dijelaskan.suatu
last()
metode sama mudahnyalist.get(list.size()-1)
, sama seperti tidak adafirst()
metode ataufifth()
metode. Ini tidak sulit untuk disintesis dan merupakan spesialisasi. Anda juga bisareverse()
daftar danlist.get(0)
yang akan memberikanlast
item. Hal-hal yang mudah dilakukan, biasanya tidak mendapatkan metode khusus mereka sendiri.menghasilkan output berikut
itu juga lancang untuk menganggap bahwa segala sesuatu yang mengimplementasikan
List
antarmuka sebenarnya memiliki konseplast()
apa pun.sumber
.size()
akan mengembalikan ukuran saat.size()-1
ini masih akan menjadi elemen terakhir terlepas, bagaimana ia tahu apakah itu diisi penuh atau tidak?.size()-1
bukan cara yang sempurna untuk diterapkanlast()
(meskipun daftar besar seperti itu sangat tidak mungkin dan saya bertanya-tanya bagaimana daftar seperti itu) akan mengimplementasikantoArray()
...)Yang
java.util.LinkedList
mendefinisikangetLast()
dangetFirst()
metode. Sayangnya metode ini tidak didefinisikan di salah satu antarmuka itu, jadi Anda harus menggunakan tipe LinkedList. Jika Anda hanya tertarik pada elemen terakhir, Anda dapat mempertimbangkan untuk menggunakan metodejava.util.Queue
antarmukapeek()
. LinkedList mengimplementasikan Antrian.sumber
Pada dasarnya Anda juga harus meminta
size()
untukfor
-loop atau iterate itu dengan meminta iterator dan menggunakannya sementara atau melakukan loop. Gunakan yang cocok untuk tujuan Anda.Iterator tahu pada titik tertentu jika ada lebih banyak entri dan memungkinkan Anda untuk mendapatkan yang berikutnya jika ada. Anda kemudian ulangi hingga "lebih banyak entri?" gagal
Lihat bagian "Melintasi Koleksi" di http://download.oracle.com/javase/tutorial/collections/interfaces/collection.html
sumber