Question

Au tout début, j'avoue que je suis un idiot;mais il y a une chose que je n'arrive pas à comprendre.Je n'arrive pas à trouver beaucoup de différence entre ArrayList et Vector à part ça :

"...(Cette classe est à peu près équivalente à Vector, sauf qu'elle n'est pas synchronisée.)... "

dans les javaDocs de Liste des tableaux.

Alors, est-ce que cette différence vraiment un facteur important dans la manière dont nous les appliquons deux classes similaires quand on considère le scénario général (c'est-à-direrejeter la demande en Programmation basée sur les threads) ?Y a-t-il d'autres marqué différences?Si c'est le cas, dites-le-moi s'il vous plaît.Si non, lequel est le le plus préféré ou généralement accepté approche?

Était-ce utile?

La solution

Outre les différences avec la synchronisation, il existe également une différence en interne lorsque vous insérez de nouveaux éléments.Pour les deux classes, la taille du tableau doit être augmentée pour éviter qu'il ne manque de place.Les vecteurs doublent leur taille par défaut.Les ArrayLists augmentent leur taille de moitié par rapport à leur taille actuelle.

Modifier:

En outre, quelques réponses ont mentionné que les vecteurs sont thread-safe.C'est vrai dans une certaine mesure, mais la raison pour laquelle ils sont en quelque sorte obsolète (Je pense) c'est parce qu'ils ne sont pas très utiles pour la plupart des besoins de synchronisation, car ils se synchronisent à chaque opération (pas sûr).Ce que vous souhaitez faire généralement, c'est synchroniser sur une séquence d'opérations.Les vecteurs ne font pas cela (les ArrayLists non plus), donc ce n'est pas vraiment la voie à suivre, même dans les situations qui nécessitent une synchronisation (en gros, c'est hors de votre contrôle).

Autres conseils

Selon API Java:

"il est recommandé d'utiliser ArrayList à la place de Vector"

Vous pouvez néanmoins obtenir une version synchronisée d'une liste avec Collections:

Collections.synchronizedList(List<T> list)

Par exemple

List list = Collections.synchronizedList(new ArrayList());

Cela renvoie une liste synchronisée (thread-safe) soutenue par la liste spécifiée.

La principale différence entre les deux est que les vecteurs sont synchronisés, ils sont donc thread-safe, contrairement aux ArrayLists.Les deux utilisent un tableau pour stocker les données qu'ils contiennent, et donc chaque fois que vous ajoutez quelque chose à son contenu, ils volonté doivent se redimensionner, même s'ils le font assez efficacement, cela doit être pris en compte.

Les ArrayLists ont également l'avantage de faire partie du Collection framework afin que vous puissiez utiliser les méthodes Collection avec lui pour trier, rechercher, etc.

J'espère que cela t'aides!

La seule différence est la synchronisation, si vous utilisez la liste dans un programme threadé, vous devez utiliser le vecteur, mais sinon, ArrayList (ou une autre implémentation non synchronisée de la liste).

La raison théorique est que la synchronisation entraîne de moins bonnes performances de Vector que celles d'ArrayList.

Le vecteur existe depuis Java 1.0

ArrayList a été publié avec Java 1.2

La méthode préférée consiste à utiliser ArrayList.

Si vous êtes préoccupé par le thread-safe, vous pouvez le synchroniser comme ceci :

Liste liste = Collections.synchronizedList(new ArrayList(...));

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top