Amélioration Java (29) -----Vecteur
Dans le chapitre d'amélioration Java (Two One) - ArrayList, le chapitre d'amélioration Java (Two Two) - LinkedList, les principes et les processus d'implémentation d'ArrayList et linkedList sont expliqués en détail pour le. Interface de liste ici Elle présente également sa classe d'implémentation Vector. La classe Vector peut implémenter un tableau d'objets extensible.
1. Introduction à Vector
Vector peut implémenter un tableau d'objets extensible. Comme un tableau, il contient des composants accessibles à l’aide d’index entiers. Cependant, la taille du vecteur peut être augmentée ou diminuée pour permettre des opérations d'ajout ou de suppression après la création du vecteur.
Vector implémente l'interface List et hérite de la classe AbstractList, nous pouvons donc la considérer comme une file d'attente et prend en charge les fonctions associées telles que l'ajout, la suppression, la modification, la traversée , etc.
Vector implémente l'interface RandmoAccess, qui offre un accès aléatoire et un accès rapide. Dans Vector, nous pouvons accéder directement aux éléments.
Vector implémente l'interface Cloneable, prend en charge la méthode clone() et peut être cloné.
public class Vector<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable
Vector fournit quatre constructeurs :
/** * 构造一个空向量,使其内部数据数组的大小为 10,其标准容量增量为零。 */ public Vector() { this(10); } /** * 构造一个包含指定 collection 中的元素的向量,这些元素按其 collection 的迭代器返回元素的顺序排列。 */ public Vector(Collection<? extends E> c) { elementData = c.toArray(); elementCount = elementData.length; // c.toArray might (incorrectly) not return Object[] (see 6260652) if (elementData.getClass() != Object[].class) elementData = Arrays.copyOf(elementData, elementCount, Object[].class); } /** * 使用指定的初始容量和等于零的容量增量构造一个空向量。 */ public Vector(int initialCapacity) { this(initialCapacity, 0); } /** * 使用指定的初始容量和容量增量构造一个空的向量。 */ public Vector(int initialCapacity, int capacityIncrement) { super(); if (initialCapacity < 0) throw new IllegalArgumentException("Illegal Capacity: "+ initialCapacity); this.elementData = new Object[initialCapacity]; this.capacityIncrement = capacityIncrement; }
En termes de variables membres, Vector fournit Il existe trois variables membres elementData, elementCount etcapacitéIncrement. Parmi eux
elementData : « Array of type Object[] », qui enregistre les éléments en Vector. Selon la conception de Vector, elementData est un tableau dynamique qui peut croître dynamiquement à mesure que des éléments sont ajoutés. La méthode spécifique d'augmentation est mentionnée plus loin (méthode EnsureCapacity). Si la taille du conteneur n'est pas spécifiée lors de l'initialisation du vecteur, la taille par défaut de 10 est utilisée.
capacityIncrement : Lorsque la taille du vecteur est supérieure à sa capacité, la capacité est automatiquement augmentée du montant. Si la taille decapacitéIncrement est spécifiée lors de la création de Vector ; alors, chaque fois que la capacité du tableau dynamique dans Vector augmente, la taille augmentée seracapacitéIncrement. Si l'incrément de capacité est inférieur ou égal à zéro, la capacité du vecteur sera doublée à chaque fois qu'une augmentation de capacité est nécessaire. Vector
En même temps, Vector est thread-safe !
2. Analyse du code source
remo ve) sera expliqué de deux manières.2.1 ajouté : add(E e)
add(E e) : ajouter l'élément spécifié à ceci La fin du vecteur.
Cette méthode est relativement simple, Le spécifique Le processus consiste d'abord à confirmer la taille du conteneur pour voir si une expansion est nécessaire, puis à ajouter l'élément E à la fin de ce vecteur.
public synchronized boolean add(E e) { modCount++; ensureCapacityHelper(elementCount + 1); //确认容器大小,如果操作容量则扩容操作 elementData[elementCount++] = e; //将e元素添加至末尾 return true; }
private void ensureCapacityHelper(int minCapacity) { //如果 if (minCapacity - elementData.length > 0) grow(minCapacity); } /** * 进行扩容操作 * 如果此向量的当前容量小于minCapacity,则通过将其内部数组替换为一个较大的数组俩增加其容量。 * 新数据数组的大小姜维原来的大小 + capacityIncrement, * 除非 capacityIncrement 的值小于等于零,在后一种情况下,新的容量将为原来容量的两倍,不过,如果此大小仍然小于 minCapacity,则新容量将为 minCapacity。 */ private void grow(int minCapacity) { int oldCapacity = elementData.length; //当前容器大小 /* * 新容器大小 * 若容量增量系数(capacityIncrement) > 0,则将容器大小增加到capacityIncrement * 否则将容量增加一倍 */ int newCapacity = oldCapacity + ((capacityIncrement > 0) ? capacityIncrement : oldCapacity); if (newCapacity - minCapacity < 0) newCapacity = minCapacity; if (newCapacity - MAX_ARRAY_SIZE > 0) newCapacity = hugeCapacity(minCapacity); elementData = Arrays.copyOf(elementData, newCapacity); } /** * 判断是否超出最大范围 * MAX_ARRAY_SIZE:private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8; */ private static int hugeCapacity(int minCapacity) { if (minCapacity < 0) throw new OutOfMemoryError(); return (minCapacity > MAX_ARRAY_SIZE) ? Integer.MAX_VALUE : MAX_ARRAY_SIZE; }
Pour l'ensemble du processus d'expansion de Vector, la taille de l'expansion est confirmée en fonction decapacitéIncrementSicapacitéIncrement <= 0, elle sera doublée, sinon elle sera étendue àcapacitéIncrement. Bien entendu, la plage maximale de cette capacité est Integer.MAX_VALUE, c'est-à-dire 2 ^ 32 - 1, donc Vector ne peut pas être étendu à l'infini.
因为Vector底层是使用数组实现的,所以它的操作都是对数组进行操作,只不过其是可以随着元素的增加而动态的改变容量大小,其实现方法是是使用Arrays.copyOf方法将旧数据拷贝到一个新的大容量数组中。Vector的整个内部实现都比较简单,这里就不在重述了。
三、Vector遍历
Vector支持4种遍历方式。
3.1、随机访问
因为Vector实现了RandmoAccess接口,可以通过下标来进行随机访问。
for(int i = 0 ; i < vec.size() ; i++){ value = vec.get(i); }
3.2、迭代器
Iterator it = vec.iterator(); while(it.hasNext()){ value = it.next(); //do something }
3.2、for循环
for(Integer value:vec){ //do something }
3.4、Enumeration循环
Vector vec = new Vector<>(); Enumeration enu = vec.elements(); while (enu.hasMoreElements()) { value = (Integer)enu.nextElement(); }
——————————————————————————————————————————————————————————————————————————
以上就是java提高篇(二九)-----Vector的内容,更多相关内容请关注PHP中文网(www.php.cn)!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Guide du nombre parfait en Java. Nous discutons ici de la définition, comment vérifier le nombre parfait en Java ?, des exemples d'implémentation de code.

Guide du générateur de nombres aléatoires en Java. Nous discutons ici des fonctions en Java avec des exemples et de deux générateurs différents avec d'autres exemples.

Guide de Weka en Java. Nous discutons ici de l'introduction, de la façon d'utiliser Weka Java, du type de plate-forme et des avantages avec des exemples.

Guide du nombre de Smith en Java. Nous discutons ici de la définition, comment vérifier le numéro Smith en Java ? exemple avec implémentation de code.

Dans cet article, nous avons conservé les questions d'entretien Java Spring les plus posées avec leurs réponses détaillées. Pour que vous puissiez réussir l'interview.

Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

Guide de TimeStamp to Date en Java. Ici, nous discutons également de l'introduction et de la façon de convertir l'horodatage en date en Java avec des exemples.

Java est un langage de programmation populaire qui peut être appris aussi bien par les développeurs débutants que par les développeurs expérimentés. Ce didacticiel commence par les concepts de base et progresse vers des sujets avancés. Après avoir installé le kit de développement Java, vous pouvez vous entraîner à la programmation en créant un simple programme « Hello, World ! ». Une fois que vous avez compris le code, utilisez l'invite de commande pour compiler et exécuter le programme, et « Hello, World ! » s'affichera sur la console. L'apprentissage de Java commence votre parcours de programmation et, à mesure que votre maîtrise s'approfondit, vous pouvez créer des applications plus complexes.
