C'est pour les collections ordonnées, par exemple java.util.List. Pourquoi les concepteurs de langage n'ont-ils pas inclus une dernière méthode? Les seules raisons auxquelles je peux penser sont:
- ambiguïté lorsque la collection est vide (retourne null ou exception exception)
- API ballonnement
D'autres raisons?
java
api-design
trois tasses
la source
la source
collection.get(collection.size() - 1)
.Réponses:
Le gonflement de l'API est probablement la réponse. D'après mon expérience, la seule fois où j'ai eu besoin de cette fonctionnalité, une file d'attente ou une pile était la structure de données correcte pour le travail ayant la méthode appropriée.
la source
get(-1)
permettait de récupérer à partir de la fin d'une liste, il ferait ce que l'OP voulait sans ajouter de gonflement d'API. Ma réponse en tant que telle a attiré des votes négatifs inexpliqués.une
last()
méthode est aussi simple quelist.get(list.size()-1)
, comme il n'y a pas defirst()
méthode ou defifth()
méthode. Ce n'est pas si difficile à synthétiser et c'est une spécialisation. Vous pouvez égalementreverse()
la liste etlist.get(0)
qui donnera l'last
élément. Les choses faciles à faire n'ont généralement pas leurs propres méthodes spécialisées.donne la sortie suivante
il est également présomptueux de supposer que tout ce qui implémente l'
List
interface a réellement le concept delast()
n'importe quoi.la source
.size()
retournera la taille actuelle.size()-1
sera toujours le dernier élément, comment pourrait-il savoir s'il a été entièrement rempli ou non?.size()-1
n'est donc pas le moyen idéal de mettre en œuvrelast()
(bien qu'une telle grande liste soit très peu probable et je me demande comment une telle liste implémenteraittoArray()
...)Le
java.util.LinkedList
définit les méthodesgetLast()
etgetFirst()
. Malheureusement, ces méthodes ne sont pas définies dans l'une de ses interfaces, vous devez donc utiliser le type LinkedList. Si vous n'êtes intéressé que par le dernier élément, vous pouvez envisager d'utiliser la méthode de l'java.util.Queue
interfacepeek()
. LinkedList implémente Queue.la source
Fondamentalement , vous avez soit de demander l'
size()
unfor
-loop ou itérer en demandant pour son iterator et l' utiliser dans un certain temps ou faire en boucle. Utilisez celui qui vous convient.L'itérateur sait à un moment donné s'il y a plus d'entrées et vous permet d'obtenir la suivante s'il y en a. Vous répétez ensuite jusqu'à "plus d'entrées?" échoue.
Voir la section "Traversing Collections" sur http://download.oracle.com/javase/tutorial/collections/interfaces/collection.html
la source