En java, hay una interfaz de lista y un método de tamaño() para calcular el tamaño de la lista. cuando llamo a List.size(), ¿cómo cuenta? ¿se cuenta linealmente? o el recuento se determina y solo el valor se devuelve cuando size()?¿Cómo funciona Java List size()?
Respuesta
El tamaño se define como el número de elementos en la lista. La implementación no especifica cómo funciona la función miembro de size() (iterar sobre miembros, conteo regresado de almacenamiento, etc.), ya que List es una interfaz y no una implementación.
En general, la mayoría de las implementaciones concretas Lista almacenará su cuenta actual a nivel local, por lo que el tamaño de O (1) y no O (n)
+1 - la última frase es definitivamente cierta para las tres clases de lista de propósito general ArrayList, CopyOnWriteArrayList y LinkedList. –
java.util.List
es una interfaz, no una clase. La implementación del método size()
puede ser diferente para diferentes implementaciones concretas. Una implementación razonable para un método size()
en una implementación java.util.List
sería inicializar un miembro de instancia de tipo int
a cero e incrementarlo/disminuirlo apropiadamente a medida que se agregan/eliminan elementos del List
. El método size()
podría simplemente devolver el miembro de instancia mencionado anteriormente. Esto es, por supuesto, simplemente un ejemplo. Para obtener detalles completos, siempre puede consultar las fuentes de las implementaciones integradas List
. Todo el código fuente ha estado disponible por años.
Este es un caso en el que realmente favorecer las convenciones de nomenclatura de .NET, utilizando el prefijo de "I" para las interfaces. – dalle
@dalle: encuentro que el prefijo 'I' es un ruido húngaro. Los programadores de Java generalmente saben que 'List' (y' Map' y 'Set' y' Collection', etc.) son interfaces. Por otro lado, muchas interfaces en Java usan el sufijo 'capaz'. p.ej. 'Serializable',' Cloneable', 'Iterable', etc. Así que supongo que java tampoco es internamente coherente ... – Asaph
" Para obtener detalles completos, siempre puedes ver las fuentes de las implementaciones de lista incorporadas. " Este es un buen consejo que te servirá en tu carrera. Y a veces, si el código fuente no está disponible, incluso descompilo para obtener la respuesta. – HairOfTheDog
- 1. C++ "new T [size]" no funciona?
- 2. ¿Cómo funciona realmente List :: Util 'shuffle'?
- 3. java: list thread locals?
- 4. font-size: 62,5% vs. font-size: 10px
- 5. ! Contiene() del objeto List no funciona
- 6. CSS list-style-type no funciona
- 7. Android Optimal Buffer Size
- 8. <size> atributo no es útil cuando se usa layer-list?
- 9. std :: queue <T, list<T>> :: size() es lento en O (n)?
- 10. ¿Cómo obtener Scala List de la lista de Java?
- 11. Establecer NSWindow Size programmatically
- 12. C struct size alignment
- 13. android ratingbar size
- 14. ffmpeg overlay size
- 15. fit dataGridView size to row's and columns's total size
- 16. body {font-size: 100.01%; } vs body {font-size: 100%; }?
- 17. matplotlib set yaxis label size
- 18. ¿Tiempo de Java que expira List/Set?
- 19. Ancestro común para Java Array y List
- 20. ¿Cómo se lee 'List separator' del sistema operativo en Java?
- 21. Java: Cómo convertir String [] a List o Set
- 22. iOS recursive folder size
- 23. android mapview marker size
- 24. Lisp binary size
- 25. $ _POST max array size
- 26. jQuery DataTables Pagination Size
- 27. ASP.NET - Viewstate Size
- 28. css printing size
- 29. android menu icon size
- 30. ¿Cómo funciona exactamente AsParallel?
Pensando en 'strlen()'? –
no es lineal. es O (1). acabo de encontrar aquí http://stackoverflow.com/questions/863469/what-is-the-time-complexity-of-a-size-call-on-a-linkedlist-in-java – coder