Java中的vector类使用方法示例详解

2025-05-29 0 40

基本操作示例

VectorApp.java

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47
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的大小,多余的元素被抛弃

}

}

运行结果:

?

1

2

3

4

5

6

7

8

9

10

11

12
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略微不同

?

1

2

3

4

5

6

7

8

9

10

11

12
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中多了一个capacityIncrement变量,该变量是用于指定每次扩容的增量,如果不指定该变量,在grow中可以发现Vector默认就扩容为原数组的1倍

线程安全

Vertor是线程安全的!

Vertor源码中另一个比较显眼的地方就是绝大部分方法都有synchronized关键字,大家都知道这个关键字是用于线程同步的,所以Vector是线程安全的!

但是即使它所有的方法都被修饰成同步,也不意味着调用它的时候永远都不需要同步手段了:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33
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);

}

}

大家运行此段代码时 跑了一小段时间之后会发现有ArrayIndexOutOfBoundsException异常,这里Vector的get,remove,size方法尽管有synchronized修饰,但是在多线程环境中,如果不在方法端额外做同步措施的话,这段代码仍然是不安全的,如果一个线程删除了序号i的元素之后,另一个线程去访问这个i的话就直接回抛异常,所以保证这段代码安全还需要再run里面再添加synchronized修饰。

希望本篇vector使用示例文章对您有所帮助

原文链接:http://www.2cto.com/kf/201605/511067.html

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 Java中的vector类使用方法示例详解 https://www.kuaiidc.com/117373.html

相关文章

发表评论
暂无评论