Quelle structure de données une liste de tableaux d'utiliser en interne?
- Astuce: JDK est open source.
- Et Grep code a la sources disponibles en ligne
- Non seulement l'open source, c'est l'été communiqués depuis le 1er jour. (Indice: src.zip à l'intérieur de votre JDK.)
En interne un
ArrayList
utilise unObject[]
.À mesure que vous ajoutez des éléments à une
ArrayList
, la liste de contrôle pour voir si la sauvegarde de tableau a de la place à gauche. Si il ya de la place, le nouvel élément est ajouté à la prochaine vide de l'espace. Si il n'y a pas de salle de, une nouvelle, plus grande, tableau est créé, et l'ancien tableau est copié dans le nouveau.Maintenant, il n'y a plus de place à gauche, et le nouvel élément est ajouté dans le prochain espace vide.
Puisque les gens aiment vraiment le code source:
Tout droit sorti de la JDK.
Object[]
comme la sauvegarde de la structure de données. Et unObject[]
peut contenir quoi que ce soit.Object[]
ArrayList
capacité initiale est de 10. Pour explorer plus en profondeur, visitez le site codenuclear.com/how-arraylist-works-internally-javaIl utilise un
Object[]
, et fait une grande matrice lorsque le tableau est plein.Vous pouvez lire les le code source ici.
ArrayList utilise un Tableau d'Objet à stocker les données en interne.
Lorsque vous initialisez une liste de tableaux, un tableau de taille 10 (capacité défaut) est créé et un élément ajouté à la liste de tableaux est en fait ajouté à ce tableau. 10 est la taille par défaut et il peut être passé en paramètre lors de l'initialisation de la liste de tableaux.
Lors de l'ajout d'un nouvel élément, si le tableau est plein, un nouveau tableau de plus de 50% de la taille initiale est créée et le dernier tableau est copié dans ce nouvel ensemble, de sorte que maintenant il y a des espaces vides pour le nouvel élément à ajouter.
Depuis le sous-jacent de la structure des données utilisées est un tableau, il est assez facile d'ajouter un nouvel élément à la liste de tableaux il est ajouté à la fin de la liste. Lorsqu'un élément est ajouté n'importe où ailleurs, dire que le début, puis tous les éléments doivent avoir à se déplacer d'une position vers la droite pour créer un espace vide au début pour le nouvel élément à ajouter. Ce processus est de temps (linéaire en temps). Mais l'Avantage de ArrayList est que de la récupération d'un élément à n'importe quelle position est très rapide (constante de temps), en tant que sous-jacente, il est tout simplement à l'aide d'un tableau d'objets.
ArrayList
a la structure de base de données:Lorsque nous avons effectivement créer un
ArrayList
le morceau de code suivant est exécuté:ArrayList
peuvent être créés dans les deux méthodes mentionnées ci-après:List list = new ArrayList();
Le constructeur par défaut est appelé et permettra de créer en interne un tableau de
Object
avec la taille par défaut 10.List list = new ArrayList(5);
Lorsque nous créons une
ArrayList
de cette façon, un constructeur avec un argument entier est appelé etcréer un tableau de
Object
avec la taille par défaut 5.À l'intérieur de la
add
méthode est de vérifier que la taille actuelle de rempli d'éléments est supérieure/égale à la taille maximale de laArrayList
alors il va créer de nouveauxArrayList
avec la taille de la nouvellearraylist = (current arraylist*3/2)+1
et de copier les données de l'ancien aunouveau tableau liste.
Elle utilise un tableau, et un couple d'entiers pour indiquer la première valeur de la dernière valeur de l'indice de
Voici un exemple de mise en œuvre.
Généralement, des structures comme
ArrayLists
sont mis en œuvre par un bon vieux tableau défini à l'intérieur de la classe et ne sont pas directement accessibles à l'extérieur de la classe.Une certaine quantité d'espace est initialement allouée pour la liste, et lorsque vous ajoutez un élément qui dépasse la taille de la matrice, la matrice sera réinitialisé avec une nouvelle capacité (qui est généralement un multiple de la taille actuelle, de sorte que le cadre n'est pas constamment ré-allocation des tableaux avec chaque nouvelle entrée est ajoutée).
La La plate-forme Java code source est disponible gratuitement. Voici un extrait:
ArrayLists utiliser des tableaux pour stocker les données. Une fois le nombre d'éléments dépasse l'allocation d'un tableau, il copie les données dans un autre tableau, probablement le double de la taille.
Un (mineur) de gain de performance est prise lors de la copie de la matrice, il est donc possible de définir la taille du tableau interne dans le constructeur de la liste de tableau.
En outre, il met en œuvre
java.util.Collection
et etjava.util.list
, et il est donc possible d'obtenir l'élément à l'index spécifié, et itératif (comme un tableau).Il utilise un Objet[]. Lorsque le tableau est plein, il crée un nouveau tableau qui est 50% plus grand en taille et copie les éléments de courant à nouveau tableau. Cela se fait automatiquement.