Isto é para coleções ordenadas, por exemplo, java.util.List. Por que os designers de linguagem não incluíram um último método? As únicas razões pelas quais consigo pensar são:
- ambiguidade quando a coleção estiver vazia (retornar nulo ou lançar exceção)
- Inchaço da API
Alguma outra razão?
java
api-design
três xícaras
fonte
fonte
collection.get(collection.size() - 1)
.Respostas:
O inchaço da API é provavelmente a resposta. Pela minha experiência, a única vez em que precisei dessa funcionalidade, uma Fila ou Pilha, foi a estrutura de dados correta para o trabalho com o método apropriado.
fonte
get(-1)
a recuperação do final de uma lista, ele faria o que o OP queria sem adicionar o inchaço da API. Minha resposta, como tal, atraiu votos inexplicáveis.um
last()
método é tão fácil quantolist.get(list.size()-1)
, assim como não háfirst()
método oufifth()
método. Não é tão difícil de sintetizar e é uma especialização. Você também podereverse()
listar elist.get(0)
qual será olast
item. As coisas fáceis de fazer geralmente não têm seus próprios métodos especializados.resulta na seguinte saída
também é presunçoso supor que tudo que implementa a
List
interface realmente tem o conceito delast()
qualquer coisa.fonte
.size()
retornará o tamanho atual.size()-1
ainda será o último elemento, independentemente, como saberia se estivesse totalmente preenchido ou não?.size()-1
não é a maneira perfeita de implementarlast()
(embora uma lista tão grande seja muito improvável e eu me pergunto como essa lista implementariatoArray()
...)O
java.util.LinkedList
define os métodosgetLast()
egetFirst()
. Infelizmente, esses métodos não estão definidos em uma de suas interfaces, portanto, você deve usar o tipo LinkedList. Se você está interessado apenas no último elemento, considere usar o métodojava.util.Queue
da interfacepeek()
. O LinkedList implementa a Fila.fonte
Basicamente você tem que pedir a
size()
umfor
-loop ou iterate lo, pedindo por sua iterador e usá-lo em um tempo ou fazer-loop. Use o adequado para o seu propósito.O iterador sabe em um determinado momento se há mais entradas e permite que você obtenha a próxima, se houver. Você então repete até "mais entradas?" falha.
Consulte a seção "Atravessando coleções" em http://download.oracle.com/javase/tutorial/collections/interfaces/collection.html
fonte