Maison > Java > javaDidacticiel > le corps du texte

Explication détaillée des méthodes d'instance de classe vectorielle

Y2J
Libérer: 2017-05-06 13:26:22
original
2102 Les gens l'ont consulté

Cet article présente principalement l'utilisation détaillée de la classe vectorielle Java et des informations pertinentes sur les exemples. Les amis dans le besoin peuvent se référer à

Exemples d'opérations de base

VectorApp.java

import java.util.Vector; 
import java.lang.*; 
import java.util.Enumeration; 
public class VectorApp 
{ 
 public static void main(String args[]) 
 { 
 Vector v1 = new Vector(); 
 Integer integer1= new Integer(1); 
 //加入为字符串对象 
 v1.addElement("one"); 
 //加入的为integer的对象 
 v1.addElement(integer1); 
 v1.addElement(integer1); 
 v1.addElement("two"); 
 v1.addElement(new Integer(2)); 
 v1.addElement(integer1); 
 v1.addElement(integer1); 
 //转为字符串并打印 
 System.out.println("The Vector v1 is:\n\t"+v1); 
 //向指定位置插入新对象 
 v1.insertElement("three",2); 
 v1.insertElement(new Float(3.9),3); 
 System.out.println("The Vector v1(used method 
 insertElementAt()is:\n\t)"+v1); 
 //将指定位置的对象设置为新的对象 
 //指定位置后的对象依次往后顺延 
 v1.setElementAt("four",2); 
 System.out.println("The vector v1 cused method setElmentAt()is:\n\t"+v1); 
 v1.removeElement(integer1); 
 //从向量对象v1中删除对象integer1 
 //由于存在多个integer1,所以从头开始。 
 //找删除找到的第一个integer1. 
 Enumeration enum = v1.elements(); 
 System.out.println("The vector v1 (used method removeElememt()is"); 
 while(enum.hasMoreElements()) 
 System.out.println(enum.nextElement()+""); 
 System.out.println(); 
 //使用枚举类(Enumeration)的方法取得向量对象的每个元素。 
 System.out.println("The position of Object1(top-to-botton):"+v1.indexOf(integer1)); 
 System.out.println("The position of Object1(tottom-to-top):"+v1.lastIndexOf(integer1)); 
 //按不同的方向查找对象integer1所处的位置 
 v1.setSize(4); 
 System.out.println("The new Vector(resized the vector)is:"+v1); 
 //重新设置v1的大小,多余的元素被抛弃 
 } 
}
Copier après la connexion

Résultat d'exécution :

E:\java01>java VectorApp 
The vector v1 is:[one,1,1,two,2,1,1] 
The vector v1(used method insetElementAt()) is: 
[one,1,three,3.9,1,two,2,1,1] 
The vector v1(used method setElementAt()) is: 
[one,1,four,3.9,1,two,2,1,1] 
The vector v1(useed method removeElement()) is: 
one four 3.9 1 two 2 1 1 
The position of object1(top-to-botton):3 
The position of object1(botton-to-top):7 
The new Vector(resized the vector) is: 
[one,four,3.9,1]
Copier après la connexion

1x extension de Vertor

Vous souvenez-vous encore que l'ArrayList est étendue à 0,5 fois la taille de l'élémenttableau à chaque fois ? Vector est légèrement différent d'ArrayList lors de l'exécution d'opérations d'expansion

protected int capacityIncrement;//用于指定每次扩容的容量
private void grow(int minCapacity) {
 // overflow-conscious code
 int oldCapacity = elementData.length;
 int newCapacity = oldCapacity + ((capacityIncrement > 0) ?
   capacityIncrement : oldCapacity);//如不指定capacityIncrement,默认扩容的容量为原数组的容量
 if (newCapacity - minCapacity < 0)
 newCapacity = minCapacity;
 if (newCapacity - MAX_ARRAY_SIZE > 0)
 newCapacity = hugeCapacity(minCapacity);
 elementData = Arrays.copyOf(elementData, newCapacity);
}
Copier après la connexion

Les amis prudents peuvent constater qu'il existe une capacitéIncrementvariable supplémentaire dans Vector, qui est utilisée pour spécifier l'incrément pour chaque extension. Montant, si vous ne spécifiez pas cette variable, vous pouvez constater en croissance que le vecteur est étendu à 1 fois le tableau d'origine par défaut

ThreadSécurité

Vertor est thread-safe !

Une autre chose remarquable dans le code source de Vertor est que la plupart des méthodes ont le mot-clé synchronisé. Tout le monde sait que ce mot-clé est utilisé pour la synchronisation des threads, donc la classe Vector est un thread Safe !

Mais même si toutes ses méthodes sont modifiées pour être synchronisées, cela ne veut pas dire que la synchronisation ne sera jamais nécessaire lors de son appel :

private static Vector<Integer> vector=new Vector<Integer>();
public static void main(String[] args) { 
 while(true)
 {
 for(int i=0;i<10;i++)
 {
 vector.add(i);
 }
 Thread removeThread=new Thread(new Runnable(){
 @Override
 public void run()
 {
 for(int i=0;i<vector.size();i++)
 {
 vector.remove(i);
 }
 }
 });
 Thread printThread=new Thread(new Runnable(){
 @Override
 public void run()
 {
 for(int i=0;i<vector.size();i++)
 {
 System.out.println(vector.get(i));
 }
 }
 }); 
 removeThread.start();
 printThread.start();
 while(Thread.activeCount()>20); 
 }
}
Copier après la connexion

Tout le monde exécute ce paragraphe Après avoir exécuté le code pendant une courte période, vous trouverez une exception ArrayIndexOutOfBoundsException Bien que la méthode Vector的get,remove,size ici soit modifiée avec synchronized, dans un environnement multithread, si aucune mesure de synchronisation supplémentaire n'est prise du côté de la méthode. , ce code sera toujours dangereux. Si un thread supprime l'élément avec le numéro de série i et qu'un autre thread accède à ce i, une exception sera levée directement. Par conséquent, pour garantir la sécurité de ce code, vous devez ajouter <.> modification à l'intérieur de run. synchronized

[Recommandations associées]

1.

Tutoriel vidéo gratuit Java

2

Tutoriel vidéo Java pour débutant

3.

Tutoriel de développement FastJson

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!