¿ArrayList
es una matriz o una lista en java? ¿Cuál es la complejidad del tiempo para la operación get, es O(n)
o O(1)
?Complejidad del tiempo para java ArrayList
Respuesta
Un ArrayList
en Java es un List
que está respaldado por un array
.
El método get(index)
es un funcionamiento de tiempo constante, O(1)
.
El código directamente de la biblioteca Java para ArrayList.get(index)
:
public E get(int index) {
RangeCheck(index);
return (E) elementData[index];
}
Básicamente, sólo se devuelve un valor directamente de la matriz de soporte. (RangeCheck(index)
) también es tiempo constante)
Su implementación se realiza con una matriz y la operación get es O (1).
javadoc dice:
El tamaño, estaVacia, get, set, iterador, y las operaciones se ejecutan en ListIterator constante tiempo. La operación de agregar se ejecuta en tiempo constante amortizado, es decir, agregar n elementos requiere O (n) tiempo. Todas las demás operaciones se ejecutan en tiempo lineal (aproximadamente). El factor constante es bajo en comparación con para la implementación LinkedList.
Para ser pedante, es un List
respaldado por una matriz. Y sí, la complejidad de tiempo para get()
es O (1).
Como todos ya han señalado, las operaciones de lectura son de tiempo constante - O (1) pero las operaciones de escritura tienen el potencial de quedarse sin espacio en la matriz de respaldo, reasignación y una copia - de manera que se ejecuta en tiempo O (n), ya que el médico dice:
el tamaño, estaVacia, get, set, iterador, y operaciones ListIterator ejecuta en tiempo constante. La operación de agregar ejecuta en tiempo constante amortizado, es decir, añadiendo n elementos requiere O (n) tiempo. Todas las otras operaciones se ejecutan en tiempo lineal (aproximadamente). El factor constante es bajo en comparación con que para la implementación LinkedList .
En la práctica todo es O (1) después de algunas adiciones, ya que la matriz de respaldo se duplica cada vez que se agota su capacidad. Entonces, si la matriz comienza en 16, se llena, se reasigna a 32, luego a 64, 128, etc., por lo que escalan bien, pero GC puede golpear durante un realloc grande.
Está un poco fuera de tema, pero odiaría que alguien se confundiera y no notara el énfasis en ** obtener ** operaciones. –
En el código JDK que estoy viendo (1.6.0_17), la nueva capacidad se calcula realmente como (oldCapacity * 3)/2 + 1. – Adamski
Disculpe la primera oración, lo que parece implicar que las operaciones de escritura se ejecutan en O (n) tiempo Eso no es lo que dice el documento, dice que * agregar n elementos requiere O (n) *. Para elementos individuales, el tiempo de inserción sigue siendo O (1). La reasignación, copia, etc. simplemente lo convierten en un O (1) algo "más grande". –
Una nota.
El método get(index)
es una constante de tiempo, O(1)
Pero ese es el caso si se conoce el índice.Si tratamos de obtener el índice usando indexOf(something)
, eso costará O(n)
- 1. Complejidad del tiempo del conjunto en Java
- 2. ¿Complejidad del tiempo para Shell sort?
- 3. Analizando algoritmos para la complejidad del tiempo
- 4. Complejidad del tiempo del algoritmo de Fleury
- 5. Complejidad del tiempo del algoritmo de Euclides
- 6. Complejidad del tiempo del algoritmo de Prim
- 7. Complejidad del tiempo de contains (Object o), en una ArrayList of Objects
- 8. Uso del comparador para ordenar ArrayList Java
- 9. Complejidad del tiempo entero en Haskell
- 10. Gallop ¿Complejidad del tiempo de búsqueda?
- 11. Complejidad del tiempo de consulta SQL
- 12. TreeMap - Complejidad del tiempo de búsqueda
- 13. Complejidad del tiempo de un algoritmo recursivo
- 14. Complejidad del tiempo de la tabla hash
- 15. Complejidad del tiempo de la potencia()
- 16. Pruebas unitarias para verificar la complejidad del tiempo
- 17. Complejidad del tiempo para acceder a un dict de Python
- 18. Complejidad del tiempo del algoritmo del gráfico profundidad-primer
- 19. Complejidad de tiempo
- 20. ¿Una herramienta para calcular la complejidad de tiempo del código Java?
- 21. ¿La complejidad del tiempo de las operaciones del conjunto python?
- 22. Complejidad del tiempo de los métodos de HashMap
- 23. ¿Cuál es la complejidad de tiempo de LinkedList.getLast() en Java?
- 24. ¿Cuál es la complejidad de tiempo de HashMap.containsKey() en java?
- 25. Cola de prioridad eliminar tiempo de complejidad
- 26. Complejidad del tiempo de consulta de la base de datos
- 27. analizando la complejidad del tiempo de mis programas
- 28. ¿Cuál es la complejidad de tiempo del método java.util.Collections.sort()?
- 29. algoritmo de multiplicación de matrices complejidad del tiempo
- 30. Complejidad del tiempo de un MD5sum incrustado de fuerza bruta
Es un tiempo constante porque la matriz [n] ---- significa que el sistema simplemente hará un cálculo matemático = offsetvalue + (tamaño de la variable) * n . por lo que todo este cálculo se realizará en el procesador sin acceder a las ubicaciones de memoria una y otra vez. Por eso es O (1) –