이 글에서는 주로 Java 벡터 클래스의 자세한 사용법과 예제에 대한 관련 정보를 소개합니다. 도움이 필요한 친구들은
기본 동작 예제
를 참고하세요. 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的大小,多余的元素被抛弃 } }
실행 결과:
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]
Vertor의 1배 확장
ArrayList가 매번 배열 크기의 0.5배로 확장된다는 것을 아직도 기억하시나요? Vector는 확장 작업을 수행할 때 ArrayList와 약간 다릅니다
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); }각 확장의 증분을 지정하는 데 사용되는 추가 용량 증가
변수가 Vector에 있음을 알 수 있습니다. 이 변수를 지정하지 않으면 Vector는 기본적으로 원래 배열의 1배로 확장됩니다.
Vertor는 스레드로부터 안전합니다!
그러나 모든 메소드가 동기화되도록 수정되었다고 해서 호출할 때 동기화가 전혀 필요하지 않다는 의미는 아닙니다.
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); } }
모두가 이 코드를 실행할 때 짧은 시간 동안
예외가 발생합니다. 여기서
으로 수정되지만 멀티 스레드 환경에서는 메서드 측에서 추가 동기화 조치를 취하지 않으면 이 코드는 예, 한 스레드가 일련 번호가 i인 요소를 삭제하고 다른 스레드가 이 i에 액세스하면 직접 예외가 발생합니다. 따라서 이 코드의 안전을 보장하려면 내부에
수정을 추가해야 합니다.. ArrayIndexOutOfBoundsException
Vector的get,remove,size
[관련 추천]synchronized
run
1. synchronized
Java 무료 동영상 튜토리얼
위 내용은 벡터 클래스의 인스턴스 메소드에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!