Esto es para colecciones ordenadas, por ejemplo, java.util.List. ¿Por qué los diseñadores de idiomas no incluyeron un último método? Las únicas razones por las que puedo pensar son:
- ambigüedad cuando la colección está vacía (devolver nulo o lanzar excepción)
- Hinchazón API
¿Alguna otra razón?
java
api-design
tres tazas
fuente
fuente
collection.get(collection.size() - 1)
.Respuestas:
API bloat es probablemente la respuesta. Según mi experiencia, la única vez que necesité esta funcionalidad, una Cola o una Pila fue la estructura de datos correcta para el trabajo que tenía el método apropiado.
fuente
get(-1)
recuperación desde el final de una lista, haría lo que el OP quisiera sin agregar una hinchazón de API. Mi respuesta como tal ha generado votos negativos inexplicables.un
last()
método es tan fácil comolist.get(list.size()-1)
, al igual que no hay ningúnfirst()
método ofifth()
método. No es tan difícil de sintetizar y es una especialización. También puede hacerreverse()
la lista ylist.get(0)
cuál dará ellast
artículo. Cosas que son fáciles de hacer, generalmente no obtienen sus propios métodos especializados.da como resultado el siguiente resultado
También es presuntuoso suponer que todo lo que implementa la
List
interfaz realmente tiene el concepto delast()
cualquier cosa.fuente
.size()
devolverá el tamaño actual.size()-1
seguirá siendo el último elemento independientemente, ¿cómo sabría si estaba completamente poblado o no?.size()-1
lo que no es la manera perfecta de implementarlast()
(aunque una lista tan grande es muy poco probable y me pregunto cómo tal lista implementaríatoArray()
...)El
java.util.LinkedList
define los métodosgetLast()
ygetFirst()
. Lamentablemente, estos métodos no están definidos en una de sus interfaces, por lo que debe usar el tipo LinkedList. Si solo le interesa el último elemento, puede considerar utilizar el método de lajava.util.Queue
interfazpeek()
. LinkedList implementa Queue.fuente
Básicamente que o bien tienen que pedir el
size()
defor
-loop o iterar al preguntar por su iterador y utilizarlo en un tiempo o hacer bucles. Use el adecuado para su propósito.El iterador sabe en un punto dado si hay más entradas y le permite obtener la siguiente si las hay. Luego repite hasta "más entradas?" falla
Consulte la sección "Colecciones transversales" en http://download.oracle.com/javase/tutorial/collections/interfaces/collection.html
fuente