Vector探秘

本文详细介绍了Java中的Vector类,包括其特点、同步机制以及构造方法和常用API。Vector类似于动态数组,支持自动扩容,适用于多线程环境。

集合类List中的对象按照索引位置排序,可以有重复对象,允许按照对象在集合中的索引位置检索对象:
   vector:内部是数组数据结构,是同步的。增删查询都很慢。
   arrarylist :内部是数组数据结构,是不同步的,代替了vector,查询的速度很快
   linkedlist:内部是链表数据结构,是不同步的。增删元素的速度很快。

Vector 类是可实现自动增长的对象数组。  java.util.vector提供了向量类(vector)以实现类似动态数组的功能。
在Java语言中没有指针的概念,但如果正确灵活地使用指针又确实可以大大提高程序的质量。比如在c,c++中所谓的“动态数组”一般都由指针来实现。为了弥补这个缺点,Java提供了丰富的类库来方便编程者使用,vector类便是其中之一。事实上,灵活使用数组也可以完成向量类的功能,但向量类中提供大量的方法大大方便了用户的使用。  创建了一个向量类的对象后,可以往其中随意插入不同类的对象,即不需顾及类型也不需预先选定向量的容量,并可以方便地进行查找。对于预先不知或者不愿预先定义数组大小,并且需要频繁地进行查找,插入,删除工作的情况。可以考虑使用向量类。

同步是线程中的概念 ,synchronized是Java中的关键字,是一种同步锁。synchronized只锁定对象,每个对象只有一个锁(lock)与之相关联,它修饰的对象有以下几种:

1.修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象;
2.修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象;
3.修饰一个静态的方法,其作用的范围是整个静态方法,作用的对象是这个类的所有对象;
4.修饰一个类,其作用的范围是synchronized后面括号括起来的部分,作用主的对象是这个类的所有对象;

注意:
1.虽然可以使用synchronized来定义方法,但synchronized并不属于方法定义的一部分,因此,synchronized关键字不能被继承。如果在父类中的某个方法使用了synchronized关键字,而在子类中覆盖了这个方法,在子类中的这个方法默认情况下并不是同步的,而必须显式地在子类的这个方法中加上synchronized关键字才可以。当然,还可以在子类方法中调用父类中相应的方法,这样虽然子类中的方法不是同步的,但子类调用了父类的同步方法,因此,子类的方法也就相当于同步了。
2.静态方法是属于类的而不属于对象的。同样的,synchronized修饰的静态方法锁定的是这个类的所有对象。

Vector<E> v=new Vector<E>();定义一个Vector类对象

// 默认构造函数
Vector()

// capacity是Vector的默认容量大小。当由于增加数据导致容量增加时,每次容量会增加一倍。
Vector(int capacity)

// capacity是Vector的默认容量大小,capacityIncrement是每次Vector容量增加时的增量值。
Vector(int capacity, int capacityIncrement)

//创建一个包含collection的Vector
Vector(Collection collection)

//将指定元素追加到此向量的末尾。 
boolean add(E o) 

//在此向量的指定位置插入指定的元素。 
void add(int index, E element) 

//将指定 Collection 中的所有元素追加到此向量的末尾,按照指定集合的迭代器所返回的顺序追加这些元素。 
boolean addAll(Collection c) 

//在指定位置将指定 Collection 中的所有元素插入到此向量中。 
boolean addAll(int index, Collection c) 

//将指定的组件添加到此向量的末尾,将其大小增加 1。 
void addElement(E obj) 

//返回此向量的当前容量。 
int capacity() 

//从此向量中移除所有元素。
void clear() 
 
//返回向量的一个副本。 
Object clone() 

//测试指定的对象是否为此向量中的组件。 
boolean contains(Object elem) 

//如果此向量包含指定 Collection 中的所有元素,则返回 true。 
boolean containsAll(Collection c) 

//将此向量的组件复制到指定的数组中。
void copyInto(Object[] anArray) 

//返回指定索引处的组件。 
E elementAt(int index) 

//返回此向量的组件的枚举。
Enumeration elements() 
 
//比较指定对象与此向量的相等性。 
boolean equals(Object o) 

//返回此向量的第一个组件(位于索引 0 处的项)。 
E firstElement() 

//返回向量中指定位置的元素。 
E get(int index) 

//搜索给定参数的第一个匹配项,使用 equals 方法测试相等性。
int indexOf(Object elem) 

//搜索给定参数的第一个匹配项,从 index 处开始搜索,并使用 equals 方法测试其相等性。
int indexOf(Object elem, int index) 

//将指定对象作为此向量中的组件插入到指定的 index 处。 
void insertElementAt(E obj, int index) 

//测试此向量是否不包含组件。
boolean isEmpty()

//返回此向量的最后一个组件。
E lastElement() 
 
//返回指定的对象在此向量中最后一个匹配项的索引。
int lastIndexOf(Object elem) 

//向后搜索指定的对象,从指定的索引处开始搜索,并返回一个索引。 
int lastIndexOf(Object elem, int index) 

//移除此向量中指定位置的元素。 
E remove(int index) 

//移除此向量中指定元素的第一个匹配项,如果向量不包含该元素,则元素保持不变。
boolean remove(Object o) 

//从此向量中移除包含在指定 Collection 中的所有元素。 
boolean removeAll(Collection c) 

//从此向量中移除全部组件,并将其大小设置为零。
void removeAllElements() 

//从此向量中移除变量的第一个(索引最小的)匹配项。 
boolean removeElement(Object obj) 

//删除指定索引处的组件。 
void removeElementAt(int index) 

//从此 List 中移除其索引位于 fromIndex(包括)与 toIndex(不包括)之间的所有元素。
protected void removeRange(int fromIndex, int toIndex) 

//用指定的元素替换此向量中指定位置处的元素。  
E set(int index, E element) 

//将此向量指定 index 处的组件设置为指定的对象。 
void setElementAt(E obj, int index) 

//设置此向量的大小。 
void setSize(int newSize) 

//返回此向量中的组件数。 
int size() 

//返回一个数组,包含此向量中以正确顺序存放的所有元素。 
Object[] toArray() 

 T[] 
toArray(T[] a) 
//返回一个数组,包含此向量中以正确顺序存放的所有元素;返回数组的运行时类型为指定数组的类型。 
String toString() 
//返回此向量的字符串表示形式,其中包含每个元素的 String 表示形式。 

已经博主授权,源码转载自 https://pan.quark.cn/s/a4b39357ea24 QueueForMcu 基于单片机实现的队列功能模块,主要用于8位、16位、32位非运行RTOS的单片机应用,兼容大多数单片机平台。 开源代码:https://.com/xiaoxinpro/QueueForMcu 一、特性 动态创建队列对象 动态设置队列数据缓冲区 静态指定队列元素数据长度 采用值传递的方式保存队列数据 二、快速使用 三、配置说明 目前QueueForMcu只有一个静态配置项,具体如下: 在文件 中有一个宏定义 用于指定队列元素的数据长度,默认是 ,可以根据需要更改为其他数据类型。 四、数据结构 队列的数据结构为 用于保存队列的状态,源码如下: 其中 为配置项中自定义的数据类型。 五、创建队列 1、创建队列缓存 由于我们采用值传递的方式保存队列数据,因此我们在创建队列前要手动创建一个队列缓存区,用于存放队列数据。 以上代码即创建一个大小为 的队列缓存区。 2、创建队列结构 接下来使用 创建队列结构,用于保存队列的状态: 3、初始化队列 准备好队列缓存和队列结构后调用 函数来创建队列,该函数原型如下: 参数说明: 参考代码: 六、压入队列 1、单数据压入 将数据压入队列尾部使用 函数,该函数原型如下: 参数说明: 返回值说明: 该函数会返回一个 枚举数据类型,返回值会根据队列状态返回以下几个值: 参考代码: 2、多数据压入 若需要将多个数据(数组)压入队列可以使用 函数,原理上循环调用 函数来实现的,函数原型如下: 参数说明: 当数组长度大于队列剩余长度时,数组多余的数据将被忽略。 返回值说明: 该函数将返回实际被压入到队列中的数据长度。 当队列中的剩余长度富余...
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值