Dotyczy to zamówionych kolekcji, np. Java.util.List. Dlaczego projektanci języków nie zastosowali ostatniej metody? Jedyne powody, o których mogę myśleć to:
- dwuznaczność, gdy kolekcja jest pusta (zwróć wartość null lub wyrzuć wyjątek)
- Nadęty API
Jakieś inne powody?
java
api-design
trzy filiżanki
źródło
źródło
collection.get(collection.size() - 1)
.Odpowiedzi:
API uwędzić jest prawdopodobnie odpowiedzią. Z mojego doświadczenia wynika, że tylko raz byłem potrzebny tę funkcjonalność kolejki lub stosu była prawidłowa struktura danych dla zadania mającego odpowiednią metodę.
źródło
get(-1)
pobieranie z końca listy, zrobiłby to, czego chciał OP bez dodawania nadmiaru API. Moja odpowiedź jako taki został sporządzony niewyjaśnionych downvotes.last()
metoda jest tak samo proste, jaklist.get(list.size()-1)
, podobnie jak nie istniejefirst()
metoda lubfifth()
metody. Synteza nie jest trudna i jest specjalizacją. Możesz takżereverse()
listę ilist.get(0)
która dalast
przedmiot. Rzeczy, które są łatwe do zrobienia, zwykle nie mają własnych specjalistycznych metod.daje następujący wynik
założeniem jest, że wszystko, co implementuje
List
interfejs, ma pojęcielast()
czegokolwiek.źródło
.size()
powróci aktualny rozmiar.size()-1
będzie jeszcze ostatni element niezależnie od tego, jak by to wiedzieć, czy to był w pełni wypełniona, czy nie?.size()-1
nie jest to idealny sposób na implementacjęlast()
(chociaż tak duża lista jest bardzo mało prawdopodobna i zastanawiam się, jak taka lista zaimplementujetoArray()
...)java.util.LinkedList
OkreślagetLast()
igetFirst()
metod. Niestety metody te nie są zdefiniowane w jednym z jego interfejsów, więc musisz użyć typu LinkedList. Jeśli interesuje Cię tylko ostatni element, możesz rozważyć użycie metodyjava.util.Queue
interfejsupeek()
. LinkedList implementuje kolejkę.źródło
Zasadniczo trzeba albo poprosić o
size()
nafor
-loop lub iterate to prosząc o jego iterator i używać go na jakiś czas lub zrób pętlę. Użyj tego, który jest odpowiedni do twoich celów.Iterator wie w danym punkcie, jeśli istnieje więcej wpisów i pozwala uzyskać następną jeżeli tam jest. Następnie powtarzaj, aż „więcej wpisów?” zawodzi.
Zobacz sekcję „Przechodzenie kolekcji” na stronie http://download.oracle.com/javase/tutorial/collections/interfaces/collection.html
źródło