76 votes

Le temps de la complexité pour java ArrayList

Est - ArrayList d'un tableau ou d'une liste en java? quel est le temps de la complexité de l'opération d'acquisition, est-il O(n) ou O(1)?

125voto

jjnguy Points 62123

Un ArrayList en Java est un List , soutenu par un array.

L' get(index) méthode est un temps constant, O(1), l'opération.

Le code tout droit sorti de la bibliothèque Java pour ArrayList.get(index):

public E get(int index) {
    RangeCheck(index);
    return (E) elementData[index];
}

Fondamentalement, elle retourne une valeur tout droit sorti de la sauvegarde de la matrice. (RangeCheck(index)) est également une constante de temps)

23voto

tangens Points 17733

C'est la mise en œuvre se fait avec un tableau et l'opération get est O(1).

javadoc dit:

La taille, isEmpty, get, set, itérateur, et listIterator des opérations en constante temps. L'opération d'ajout s'exécute en temps constant amorti, c'est, en ajoutant n éléments nécessite O(n) fois. Toutes les autres opérations de exécuter en temps linéaire (grosso modo). Le facteur constant est faible par rapport pour la LinkedList mise en œuvre.

12voto

Kristopher Ives Points 2107

Comme tout le monde l'a déjà souligné, les opérations de lecture sont à temps constant O(1) mais les opérations d'écriture ont le potentiel de manquer d'espace dans la sauvegarde de tableau, la ré-allocation, et copie - donc, qui s'exécute en O(n) le temps, comme le doc a dit:

La taille, isEmpty, get, set, itérateur, et listIterator opérations sont exécutées dans la constante de temps. L'opération d'ajout fonctionne en temps constant amorti, qui est, l'ajout de n éléments nécessite O(n) fois. Toutes les autres opérations sont exécutées dans le temps linéaire (grosso modo). L' facteur constant est faible par rapport à que pour la LinkedList la mise en œuvre.

Dans la pratique, tout est O(1), après quelques ajoute, depuis le support de tableau est doublé à chaque fois c'est la capacité est épuisé. Donc, si le tableau commence à 16, est plein, il est réaffecté à 32, 64, 128, etc. alors qu'il évolue bien, mais GC peut toucher jusqu'au cours d'une grande realloc.

5voto

Carl Smotricz Points 36400

Pour être pédant, c'est un List soutenu par un tableau. Et oui, la complexité du temps pour get() O(1).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X