全网整合营销服务商

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

免费咨询热线: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的详细说明  # 这段  # 也不  # 都有  # 第一个  # 大家都  # 多个  # 不需要  # 跑了  # 仍然是  # 永远都  # 后会  # 设置为  # 所处  # 对您  # 如不  # 还需  # 使它  # 不安全  # 多线程  # 要再 


相关文章: 已有域名能否直接搭建网站?  建站之星2.7模板:企业网站建设与h5定制设计专题  太平洋网站制作公司,网络用语太平洋是什么意思?  如何在橙子建站中快速调整背景颜色?  高端建站如何打造兼具美学与转化的品牌官网?  成都响应式网站开发,dw怎么把手机适应页面变成网页?  宁波免费建站如何选择可靠模板与平台?  婚礼视频制作网站,学习*后期制作的网站有哪些?  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  如何在建站宝盒中设置产品搜索功能?  建站主机数据库如何配置才能提升网站性能?  完全自定义免费建站平台:主题模板在线生成一站式服务  建站之星与建站宝盒如何选择最佳方案?  Thinkphp 中 distinct 的用法解析  c# F# 的 MailboxProcessor 和 C# 的 Actor 模型  小型网站制作HTML,*游戏网站怎么搭建?  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  油猴 教程,油猴搜脚本为什么会网页无法显示?  建站之星安装后界面空白如何解决?  如何快速搭建安全的FTP站点?  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  C++如何将C风格字符串(char*)转换为std::string?(代码示例)  广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?  如何在搬瓦工VPS快速搭建网站?  如何选择适合PHP云建站的开源框架?  香港服务器租用费用高吗?如何避免常见误区?  中山网站推广排名,中山信息港登录入口?  如何在IIS7上新建站点并设置安全权限?  网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?  如何通过虚拟机搭建网站?详细步骤解析  北京网站制作公司哪家好一点,北京租房网站有哪些?  网站设计制作企业有哪些,抖音官网主页怎么设置?  如何在七牛云存储上搭建网站并设置自定义域名?  佛山企业网站制作公司有哪些,沟通100网上服务官网?  网站网页制作专业公司,怎样制作自己的网页?  独立制作一个网站多少钱,建立网站需要花多少钱?  济南专业网站制作公司,济南信息工程学校怎么样?  建站VPS选购需注意哪些关键参数?  如何通过虚拟主机空间快速建站?  深圳网站制作的公司有哪些,dido官方网站?  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何快速搭建高效可靠的建站解决方案?  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  桂林网站制作公司有哪些,桂林马拉松怎么报名?  如何快速搭建FTP站点实现文件共享?  建站之星如何配置系统实现高效建站?  一键制作网站软件下载安装,一键自动采集网页文档制作步骤?  小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊? 

您的项目需求

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