Dies gilt für bestellte Sammlungen, zB java.util.List. Warum haben die Sprachdesigner keine letzte Methode aufgenommen? Die einzigen Gründe, die mir einfallen, sind:
- Mehrdeutigkeit, wenn die Auflistung leer ist (Rückgabe einer Null- oder Ausnahmebedingung)
- API aufblähen
Andere Gründe?
java
api-design
Drei Tassen
quelle
quelle
collection.get(collection.size() - 1)
.Antworten:
API Bloat ist wahrscheinlich die Antwort. Nach meiner Erfahrung war das einzige Mal, dass ich diese Funktionalität für eine Warteschlange oder einen Stapel benötigte, die richtige Datenstruktur für den Job mit der entsprechenden Methode.
quelle
get(-1)
Abrufen vom Ende einer Liste unterstützt, würde es das tun, was das OP wollte, ohne API-Aufblähung hinzuzufügen. Meine Antwort als solche hat zu ungeklärten Abstimmungen geführt.Eine
last()
Methode ist genauso einfach wielist.get(list.size()-1)
, genauso wie es keinefirst()
Methode oderfifth()
Methode gibt. Es ist nicht so schwer zu synthetisieren und ist eine Spezialisierung. Sie können auchreverse()
die Liste undlist.get(0)
die denlast
Artikel geben. Dinge, die einfach zu tun sind, bekommen normalerweise keine eigenen spezialisierten Methoden.ergibt die folgende Ausgabe
Es ist auch vermessen anzunehmen, dass alles, was die
List
Schnittstelle implementiert , tatsächlich das Konzept vonlast()
irgendetwas hat.quelle
.size()
Gibt zurück, dass die aktuelle Größe.size()-1
immer noch das letzte Element ist, unabhängig davon, wie würde es wissen, ob es vollständig gefüllt ist oder nicht?.size()-1
ist nicht die perfekte Art und Weise zu implementierenlast()
(wenn auch eine so große Liste sehr unwahrscheinlich ist , und ich frage mich , wie eine solche Liste würde implementierentoArray()
...)Das
java.util.LinkedList
definiert diegetLast()
undgetFirst()
Methoden. Leider sind diese Methoden nicht in einer ihrer Schnittstellen definiert, sodass Sie den LinkedList-Typ verwenden müssen. Wenn Sie sich nur für das letzte Element interessieren, können Siejava.util.Queue
diepeek()
Methode der Schnittstelle verwenden. LinkedList implementiert Queue.quelle
Grundsätzlich müssen Sie entweder nach der
size()
forfor
-Schleife fragen oder sie durchlaufen, indem Sie nach ihrem Iterator fragen und sie in einer while- oder do-Schleife verwenden. Verwenden Sie den für Ihren Zweck geeigneten.Der Iterator weiß zu einem bestimmten Zeitpunkt, ob weitere Einträge vorhanden sind, und ermöglicht es Ihnen, den nächsten abzurufen, falls vorhanden. Sie wiederholen dann bis "weitere Einträge?" scheitert.
Weitere Informationen finden Sie im Abschnitt "Durchsuchen von Sammlungen" unter http://download.oracle.com/javase/tutorial/collections/interfaces/collection.html
quelle