8
votes

Pourquoi un entier entre parenthèses d'une arrayliste

Quelque part où j'ai vu un java.util.list défini comme ci-dessous.
Liste MyList = Nouvelle ArrayList (0);
Quelqu'un peut-il expliquer ce que l'entier entre parenthèses et comment l'utiliser? Merci.


1 commentaires

6 Réponses :


0
votes

Il spécifie la capacité de la liste


0 commentaires

2
votes

Pour définir une capacité initiale de la flambée.


1 commentaires

Je suppose que cela est bien défini dans la documentation que j'ai affichée. Peut-être que la question op est: pourquoi?



6
votes

Le paramètre décide de la capacité de démarrage de la liste .

Un ArrayList attribue la mémoire en interne pour contenir un certain nombre d'objets. Lorsque vous ajoutez également plus d'éléments, il doit attribuer plus de mémoire et copier toutes les données au nouvel endroit, qui prend un certain temps. Selon vous, vous pouvez spécifier une supposition sur le nombre d'objets que vous allez mettre dans votre ArrayList pour aider Java.
Une taille de départ de 0 indique probablement que le programmeur pense que la liste sera rarement utilisée, il n'est donc pas nécessaire de l'attribuer la mémoire pour commencer.

[modifier]
Pour clarifier, comme @LuGigimendoza et @emory disent dans la discussion, il est très difficile de penser à un scénario où il serait logique d'utiliser 0 comme une capacité initiale. Dans la majorité des cas, le constructeur par défaut fonctionne très bien.


9 commentaires

"Une taille de départ de 0 indique probablement que le programmeur pense que la arracheliste sera rarement utilisée" peut-être, peut-être pas. Cela dépend de la mise en œuvre.


Bonjour Luiggi, que voulez-vous dire par "dépend de la mise en œuvre". Pensez-vous qu'un programmeur peut avoir une autre raison de définir la taille initiale comme zéro. Pourriez-vous s'il vous plaît expliquer?


@Luigimendoza dépend de la mise en œuvre? La mise en œuvre est spécifiée ( Docjar.com/html/aPi/java /util/arraylist.java.html ). La raison la plus logique de spécifier une taille de départ de 0 est de conserver la mémoire, anticipant qu'il sera vide pendant une longue période.


@emory en effet, cela pourrait être un très mauvais cas si vous savez que votre matrice pourrait avoir des milliers d'éléments, car chaque fois que vous ajoutez un nouvel élément, le tableau doit augmenter (cela signifie: créer un nouveau tableau avec une taille augmentée par la dernière fois. Longueur de la matrice par facteur, peut-être 1,5, puis copiez tous les éléments de l'ancien tableau vers le nouveau, oui assez lourd lorsque vous avez beaucoup de données). En outre, le constructeur par défaut initialise la matrice d'une capacité de 10, basée dans une analyse ultérieure effectuée par les concepteurs de langue Java. Je ne vois pas le bien d'une capacité initiale sur la performance.


@emory aussi c'est la mise en œuvre OpenJDK, il existe également une mise en œuvre Sun JDK (et peut-être d'autres implémentations que je ne savais pas encore).


Un cas de bord où il pourrait avoir de sens est le sens, c'est imprimé vide (@ notnullable liste allhonestpolitis) . Doit fournir une liste non nulle, mais ne prévoyez jamais d'utiliser la méthode Ajouter . Ajouter une vérification de la santé mentale affirmez 0 == allhonestpolitis. Taille (): "BS";


@emory Dans les cas où vous ne savez pas quelle capacité initiale pourrait être, utilisez simplement le constructeur par défaut, sa taille sera 0 aussi.


@Luiggimendoza Je recommande d'utiliser le constructeur par défaut, mais si je lis correctement la mise en œuvre OpenJDK, la taille du constructeur par défaut sera de 10.


@emory Si vous avez un scénario de cas réel pour prouver l'initialisation d'une arracheListe avec 0 capacité est meilleur que les concepteurs de langue Java proposés (10 par défaut), je vais accepter que je me trompe et que vous êtes correct (et non Dites-moi qu'un tableau de 10 longueurs a pire une performance qu'un réseau de 5 longueurs, ce n'est tout simplement pas valide lorsque vous avez plus de 100 mbs RAM disponible).



0
votes

Ne confondez pas avec la taille de la liste des matrices et sa capacité :

  • La taille est le nombre d'éléments de la liste;
  • la capacité est le nombre d'éléments que la liste peut potentiellement accueillir sans réaffecter ses structures internes.

    Lorsque vous appelez New ArrayList (0) , vous définissez la capacité initiale de la liste , pas sa taille. En d'autres termes, lorsqu'il est construit de cette manière, la liste des matrices commence sa vie vide.


3 commentaires

En outre, il serait bon d'ajouter les avantages et les pièges d'initialisation de la graisse avec différentes capacités.


J'aurais pu être mais la question ne concerne pas " les avantages et les pièges d'initialisation de l'arraylist avec différentes capacités ".


Hmm ... Je reçois cela pourrait être mis en place une terminologie, mais n'est-ce pas "taille" de sorte de trompeur? "Fullness" ne serait-il pas "chargée", "vacance" ou "saturation" être mieux?



0
votes

Lorsqu'il est utilisé comme xxx

il construit une liste vide avec la capacité initiale spécifiée.

Par défaut lorsque rien n'est spécifié. xxx

une liste vide avec une capacité initiale de dix est construite.

lire Ici

Ne pas mal interpréter cela comme une taille de la flambée.


0 commentaires

1
votes

Il est de définir une capacité initiale de l'arrayliste .

Vous n'êtes pas obligé de passer un paramètre de taille si vous le souhaitez, car il existe également un constructeur qui n'a aucun argument.

Chaque fois que vous ajoutez un élément supplémentaire, et si la taille de la liste ne permet pas d'addition, la classe créera une autre liste dans le tas < / Code> Avec une taille plus grande et copiera le contenu de l'ancien tableau à celui-ci avec l'élément supplémentaire, supprimant l'ancien tableau .

La capacité de l'instanciation initiale est là pour créer la taille exacte de la liste qui aide à ne pas attribuer des blocs de mémoire supplémentaires en créant de nouvelles listes < / code>, supprimant les anciens et copier le contenu au moment de l'exécution, où il aide en performance.


0 commentaires