基本操作示例

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小时内与您取得联系。