Quand dois-je utiliser une arraylist en Java et quand dois-je utiliser un tableau? P>
9 Réponses :
Les arraylistes sont utiles lorsque vous ne savez pas à l'avance le nombre d'éléments dont vous aurez besoin. Exemple simple: vous lisez un fichier texte et utilisez une liste de tous les mots que vous trouvez. Vous pouvez simplement continuer à ajouter à votre liste de matrices, cela augmentera. P>
Les matrices dont vous avez besoin pour déclarer leur taille. P>
Un tableau doit être déclaré avec une taille fixe, vous devez donc connaître le nombre d'éléments à l'avance. P>
Une arracheListe est préférable lorsque vous ne savez pas combien d'éléments dont vous aurez besoin à l'avance car il peut augmenter à votre guise. P>
Une arracheListe peut également être préférable si vous devez effectuer des opérations disponibles dans son API qui nécessiterait une implémentation manuelle pour un tableau. (E.G. Indexof) P>
Quelques différences: p>
A [i] code> vs A.get (i) code>) li>
- Les tableaux ne jouent pas bien avec les génériques (par exemple, vous ne pouvez pas créer de tableau générique) li>
- Les tableaux ne peuvent pas être facilement emballés sous la forme d'arraylist (par exemple, Collections Utils comme
checkedlist code>, synchronizedlist code> et non vodiifiablelist code>) li>
- Déclaration de la liste code> comme code> Liste code> Vous pouvez ébranler facilement la mise en œuvre avec un
linkedlist code> lorsque vous avez besoin; Cet IMHO est le meilleur avantage sur les tableaux simples li>
- 's
TOSTRING code>, Equals code> et HashCode code> est bizarre et orné d'erreur, vous devez utiliser Arrays Utilitaires de classe Li>
ul>
Pourquoi utiliser une arrayliste tout le temps? Si vous avez des situations dans lesquelles votre tableau n'a pas besoin de développer, alors pourquoi utiliser le tableau? Ou est-ce que les frais généraux pour le tableau sont négligeables?
Dans la plupart des temps, je dirais oui, c'est parce qu'il utilise une matrice dans sa mise en œuvre elle-même. Il est plus pratique d'utiliser la liste et toutes les belles choses qui sont livrées avec les collections. Si vous avez des problèmes de performance à la fin, vous pouvez voir si la liste est vraiment le goulot d'étranglement et le supprimez.
Beaucoup plus utile que la capacité de substituer linkedlist (qui est très rarement nécessaire) est la possibilité d'utiliser des collections.SingletonList () et EmptyList ().
L'idée est que l'arracheListe est plus orientée objet qu'un tableau, pour le bien de cette question, je pense que c'est worty
Vous ne pouvez pas créer de tableau générique? Vous n'avez pas besoin de, c'est déjà générique! La gamme de choses n'acceptera que des choses.
Classe FOO
Lorsque vous souhaitez modifier sa taille en ajoutant ou en supprimant des éléments. P>
Lorsque vous voulez le transmettre à quelque chose qui veut une collection ou ibler (bien que vous puissiez utiliser des tableaux.Aslist (a) pour créer une matrice, A ressembler à une liste). P>
Un autre couple de points: p>
Je préférerais avoir une matrice représentée par une classe réelle avec une interface appropriée. Cela pourrait utiliser une matrice bidimensionnelle en interne donc je serais d'accord sur cette utilisation mais pas comme une interface générale pour représenter une matrice.
@VoidPointer - En général, je suis d'accord avec vous, bien que cela dépend de la nécessité de la crise importante que je jouais.
Je dirais que la présomption par défaut devrait être d'utiliser une arracheListe sauf si vous avez un besoin spécifique, simplement parce qu'il conserve votre code plus flexible et moins sujet aux erreurs. Pas besoin d'élargir la taille de la déclaration lorsque vous ajoutez un élément supplémentaire de 500 lignes de code, etc. et référennent l'interface de la liste, vous pouvez donc remplacer la liste des matrices par une liste lié à une liste ou une autre liste d'implémentation de la liste pouvant aider une situation sans avoir à changer beaucoup de code. P>
Cela étant dit, des tableaux ont des propriétés que vous ne sortirez tout simplement pas d'une liste. L'une est une taille définie avec des éléments nuls. Cela peut être utile si vous ne voulez pas garder les choses dans un ordre séquentiel. Par exemple, un jeu TIC-TAC-TOE. P>
Les tableaux peuvent être multidimensionnels. Les arraylistes ne peuvent pas. P>
Les tableaux peuvent traiter des primitives, une arrachelist ne peuvent pas (bien qu'il existe des classes de collecte tiers qui enveloppent des primitives, elles ne font pas partie de l'API de collections standard). P>
Java a autoboxé depuis Java 5 afin que vous puissiez ajouter un Int à une arrayliste
C'est certainement vrai, mais il ne prédit pas les problèmes de performance si vous en avez un grand nombre d'entre eux.
Il ne s'agit pas seulement du fait que les matrices ont besoin de croître, une collection est plus facile à traiter.
Les matrices parfois vont bien, lorsque vous avez juste besoin de itérer sur des éléments, en lecture seule. Cependant, la plupart du temps que vous souhaitez utiliser des méthodes telles que contient, etc. p>
Vous ne pouvez pas créer de tableaux génériques, donc il "pourrait" ou pourrait ne pas vous déranger. P>
quand Donnez doute, utilisez des collections, il fera des personnes qui utilisent votre API vous aimer :-). Si vous ne les fournissez que des tableaux, les premières lignes de code qu'ils écrivent sont les suivantes: p>
Arrays.Aslist Ne retournez pas de java.UtilL.ArrayList, mais seulement une classe privée similaire à l'arraylist
Oui, je suis au courant de cela :-), mais merci de l'avoir mentionné, cela pourrait être utile pour quelqu'un.
L'interface de liste, de laquelle ArrayList est une implémentation dans le Cadre de collections Java est beaucoup plus riche alors qu'est une matrice de Java plaine. En raison du soutien relativement généralisé du cadre de collecte dans les bibliothèques Java et 3e Parti, l'utilisation d'une arrayliste au lieu d'un tableau a du sens en général. Je n'utiliserais que des tableaux s'il y a vraiment besoin pour eux:
situations où un tableau se sent plus naturel, tels que des tampons de données brutes comme dans p>
private List<Foo> fooList = new ArrayList<Foo>(); public List<Foo> getFooList() { return Collections.unmodifiableList(fooList); }
J'ajouterais que vous devriez dépendre de Java.Utillist, ce qui vous permet d'échanger la mise en œuvre plutôt indolore dans la plupart des cas.
g'day, p>
Quelques points que les gens semblent avoir manqués jusqu'à présent. P>
EDIT: strong> ooop. En ce qui concerne le dernier point de la liste, j'ai oublié le cas particulier où vous avez une gamme d'objets, alors ces tableaux peuvent également contenir tout type d'objet. Merci pour le commentaire, Yishai! (-: p>
htth p>
acclamations, p>
Si vous avez un matrice d'objet [], il peut contenir tout type d'objets, comme une liste de matrices.
Duplicaté: Stackoverflow.com/Questtions/412813/ ...
@Michael: Je pense que cette question a des réponses plus complètes
@DFA: Cela ne signifie pas que nous devrions dupliquer les réponses. Le "un vrai moyen" serait de mettre à jour / publier de nouvelles réponses sur la question initiale.
Ce n'est pas un duplicata car la question liée est spécifique pour C #
Veuillez rouvrir, cette question est spécifique pour Java
Il existe des différences entre les langues de sorte qu'une question C # ne fonctionne pas comme une réponse pour Java tout le temps
Ne devrait pas être fermé car il s'agit d'une question complètement différente.