Tout d'abord, nous examinons les deux catégories qui implémentent les interfaces de liste, et il existe trois classes d'implémentation dans l'interface de liste, à savoir ArrayList, Vector et LinkedList. La liste est utilisée pour stocker plusieurs éléments, peut maintenir l'ordre des éléments et permet la répétition des éléments.
Les différences pertinentes entre les trois classes de mise en œuvre spécifiques sont les suivantes:
1. ArrayList est la classe d'implémentation de liste la plus couramment utilisée, implémentée en interne via Arrays, qui permet un accès aléatoire rapide aux éléments. L'inconvénient des tableaux est qu'il ne peut pas être espacé entre chaque élément. Lorsque la taille du tableau n'est pas satisfaite, la capacité de stockage doit être augmentée. Il est nécessaire de dire que les données des déjà réduites sont copiées dans le nouvel espace de stockage. Lors de l'insertion ou de la suppression des éléments de la position centrale de la liste d'arraie, le tableau doit être copié, déplacé et le coût est relativement élevé. Par conséquent, il convient aux recherches et traversées aléatoires, et non à l'insertion et à la suppression.
2.Vector est également implémenté via des tableaux, la différence est qu'il prend en charge la synchronisation du thread, c'est-à-dire, à un certain moment, un seul thread peut écrire un vecteur pour éviter l'incohérence causée par plusieurs threads écrits en même temps, mais il en coûte beaucoup pour implémenter la synchronisation, donc l'accès est plus lent que l'accès à ArrayList.
3. LinkedList utilise une structure de liste liée pour stocker les données, ce qui est très adapté à l'insertion dynamique et à la suppression des données, et l'accès aléatoire et les vitesses de traversée sont relativement lents. De plus, il fournit également des méthodes qui ne sont pas définies dans l'interface de liste, qui sont spécifiquement utilisées pour faire fonctionner l'en-tête de table et les éléments de queue, et peuvent être utilisées comme piles, files d'attente et files d'attente bidirectionnelles.
En regardant le code source Java, j'ai constaté que lorsque la taille du tableau ne suffit pas, je dois recréer le tableau puis copier les éléments dans le nouveau tableau. La taille du tableau étendu de ArrayList et Vector est différente.
ArrayList:
public booléen add (e e) {assurecapacité (taille + 1); // ajouter des éléments pour déterminer s'ils peuvent les accueillir. Si vous ne pouvez pas, vous devez créer un nouveau tableau ElementData [size ++] = e; return true;} public void assurecapacity (int mincapacity) {modCount ++; int oldcapacity = elementData.length; if (mincapacity> oldcapacity) {object olddata [] = elementData; // Cette ligne n'a pas montré l'utilité, je ne sais pas ce que les développeurs pensent sur int NewCapacity = (OldCapacity * 3) / 2 + 1; // Ajouter la taille du nouveau tableau if (newCapacity <mincapacity) newCapacity = mincapacity; // La mincapacité est généralement proche de la taille, il s'agit donc d'une victoire: elementData = arrays.copyof (elementData, newcapacity); }}Dans Vector:
private void assurecapacityHelper (int mincapacity) {int oldcapacity = elementData.length; if (mincapacity> oldcapacity) {object [] olddata = elementData; int newCapacity = (CapacitéIncrement> 0)? (OldCapacity + CapacitéIncrement): (OldCapacity * 2); if (newCapacity <mincapacity) {newCapacity = mincapacity; } elementData = arrays.copyof (elementData, newCapacity); }}La différence entre ArrayList et Vector est la suivante:
ArrayList est élargi de 50% + 1 par défaut en cas de mémoire insuffisante, et le vecteur est élargi par défaut.
Vector fournit une interface indexof (OBJ, start), mais ArrayList ne le fait pas.
Les vecteurs sont au niveau de la sécurité du fil, mais dans la plupart des cas, les vecteurs ne sont pas utilisés car la sécurité des filetages nécessite une plus grande surcharge du système.
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.