全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

 基本操作示例

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

线程安全

Vertor是线程安全的!

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

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

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类使用示例文章对您有所帮助


# Java中vector类用方法详解  # Java  # vector用法  # Java中Vector与ArrayList的区别详解  # JAVA Vector源码解析和示例代码  # 详解Java编程中向量(Vector)的应用  # Java中的vector类使用示例小结  # Java 中的vector和list的区别和使用实例详解  # 详解Java中的Vector  # Java vector的详解及实例  # Java中的Vector详细解读  # java中vector与hashtable操作实例分享  # java ArrayList和Vector的区别详解  # java中Vector的详细说明  # 这段  # 也不  # 都有  # 第一个  # 大家都  # 多个  # 不需要  # 跑了  # 仍然是  # 永远都  # 后会  # 设置为  # 所处  # 对您  # 如不  # 还需  # 使它  # 不安全  # 多线程  # 要再 


相关文章: TestNG的testng.xml配置文件怎么写  宝华建站服务条款解析:五站合一功能与SEO优化设置指南  建站之星代理如何获取技术支持?  SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建  高防服务器租用首荐平台,企业级优惠套餐快速部署  建站之星伪静态规则如何正确配置?  如何选择适合PHP云建站的开源框架?  香港网站服务器数量如何影响SEO优化效果?  北京企业网站设计制作公司,北京铁路集团官方网站?  建站之星如何保障用户数据免受黑客入侵?  制作农业网站的软件,比较好的农业网站推荐一下?  韩国服务器如何优化跨境访问实现高效连接?  c# F# 的 MailboxProcessor 和 C# 的 Actor 模型  贸易公司网站制作流程,出口贸易网站设计怎么做?  定制建站流程解析:需求评估与SEO优化功能开发指南  如何安全更换建站之星模板并保留数据?  名字制作网站免费,所有小说网站的名字?  济南专业网站制作公司,济南信息工程学校怎么样?  中山网站制作网页,中山新生登记系统登记流程?  如何通过WDCP绑定主域名及创建子域名站点?  建站之星北京办公室:智能建站系统与小程序生成方案解析  测试制作网站有哪些,测试性取向的权威测试或者网站?  广州营销型建站服务商推荐:技术优势与SEO优化解析  如何制作一个表白网站视频,关于勇敢表白的小标题?  网站制作报价单模板图片,小松挖机官方网站报价?  如何确保FTP站点访问权限与数据传输安全?  建站之星代理如何优化在线客服效率?  较简单的网站制作软件有哪些,手机版网页制作用什么软件?  单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?  简单实现Android文件上传  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  如何通过商城自助建站源码实现零基础高效建站?  大同网页,大同瑞慈医院官网?  怎么将XML数据可视化 D3.js加载XML  制作表格网站有哪些,线上表格怎么弄?  建站之星图片链接生成指南:自助建站与智能设计教程  网页设计与网站制作内容,怎样注册网站?  常州自助建站费用包含哪些项目?  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  Python如何创建带属性的XML节点  西安专业网站制作公司有哪些,陕西省建行官方网站?  完全自定义免费建站平台:主题模板在线生成一站式服务  制作国外网站的软件,国外有哪些比较优质的网站推荐?  武汉外贸网站制作公司,现在武汉外贸前景怎么样啊?  网站制作大概多少钱一个,做一个平台网站大概多少钱?  制作销售网站教学视频,销售网站有哪些?  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。