java向量vector类,java数据结构——Vector(向量类)
Vector底層是用數組實現的,其容量是可以動態擴展的,默認初始容量是10,默認增長因子是0,詳細的擴容方式會在構造方法中講述。
Vector對象和ArrayList一樣可以隨意插入不同類的對象,因為其動態擴展的特性,不需要考慮容量限制。事實上Vector與ArrayList的實現方式非常相似,但是ArrayList中的方法沒有synchronized關鍵字修飾,而Vector類中的方法都有synchronized關鍵字修飾,其中的單個方法都屬于原子操作,是線程安全的。注意:多個原子操作組成的復合操作并不是線程安全的,必須將該復合操作變成原子操作,才能保證線程安全。
然而正因為Vector類中每個方法中都添加了synchronized的關鍵字來保證同步,使得它的效率大大的降低了,比ArrayList的效率要慢,因此一般情況下都不使用Vector對象,而會選擇使用ArrayList。
1、Vector類的四種構造方法
public vector() //自動對向量進行管理
public vector(int initialcapacity,int capacityIncrement) //
public vector(int initialcapacity)
public Vector(Collection c)//創建一個包含集合 c 元素的向量:
頻繁地擴容容易引起效率問題,因此對于第二種和第三種構造方法,可以通過指定參數來優化向量的存儲空。其中initialcapacity設定向量對象的容量(即向量對象可存儲數據的大小),當真正存放的數據個數超過容量時。系統會擴充向量對象存儲容量。此時參數capacityincrement就給定了每次擴充的擴充值。當capacityincrement為0的時候,則每次擴充一倍。
2、Vector類常用的插入方法
//將obj對象插入到向量末尾
public final synchronized boolean add(Object obj)
public final synchronized void addElement(Object obj)
//在index指定的位置插入obj,原來對象以及此后的對象依次往后順延。
public final synchronized void add(int index,Object obj)
//將index處的對象設置成obj,原來的對象將被覆蓋。
public final synchronized void setElementAt(Object obj,int index)
3、Vector類常用的刪除功能
//從向量中刪除obj,若有多個存在,則從向量頭開始,刪除找到的第一個與obj相同的向量成員
public final synchronized void removeElement(Object obj)
//刪除向量所有的對象
public final synchronized void clear();
public final synchronized void removeAllElement();
//刪除index所指的地方的對象
public fianl synchronized void removeElementAt(int index)
4、Vector類常用的查詢搜索功能
//返回向量中指定位置的元素
public final synchronized Object get(int index)
//從向量頭開始搜索obj,返回所遇到的第一個obj對應的下標,若不存在此obj,返回-1.
public final int indexOf(Object obj)
//從index所表示的下標處開始搜索obj
public final synchronized int indexOf(Object obj,int index)
//從向量尾部開始逆向搜索obj.
public final int lastindexOf(Object obj)
//從index所表示的下標處由尾至頭逆向搜索obj
public final synchornized int lastIndex(Object obj,int index)
//獲取向量對象中的首個obj
public final synchornized firstElement()
//獲取向量對象的最后一個obj
public final synchornized Object lastElement()
5、Vector類的其他方法
//獲取向量元素的個數。它們返回值是向量中實際存在的元素個數,而非向量容量。可以調用方法capacity()來獲取容量值。
public final int size();
//此方法用來定義向量的大小,若向量對象現有成員個數已經超過了newsize的值,則超過部分的多余元素會丟失。
public final synchronized void setSize(int newsize);
//此方法將向量對象對應到一個枚舉類型,進而可以對向量中的元素進行遍歷
public final synchronized Enumeration elements();
6、Vector對象中元素常用的遍歷方式
Vector hs=new Vector<>();//向量類可以指定泛型
//遍歷方式1
public void printSet1(Vector hs) {
Enumeration elements = hs.elements();
while (elements.hasMoreElements()) {
System.out.println(elements.nextElement());
}
}
//遍歷方式2
public void printSet2(Vector hs){
for(int i=0;i
System.out.println(hs.get(i));
}
}
//遍歷方式3
public void printSet3(Vector hs){
for(String s:hs){
System.out.println(s);
}
}
//遍歷方式4
public void printSet4(Vector hs) {
Iterator it = hs.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
}
遍歷方式示例:
public static void main(String[] args) {
Vector hs=new Vector();
User user=new User();
user.setAge(12);
user.setName("haha");
hs.add(user);//1、先插入user對象
boolean f=hs.add(1);//2、插入Integer對象(JDK1.5之后可以自動裝箱與拆箱)
hs.addElement("w");//3、插入String對象
hs.add(1,"3");//4、在索引位置1處插入String對象
System.out.println(f);//第2步操作返回boolean類型結果
Iterator it = hs.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
/*for(int i=0;i
System.out.println(hs.get(i));
}*/
/*Enumeration elements = hs.elements();
while (elements.hasMoreElements()) {
System.out.println(elements.nextElement());
}*/
}
輸出如下所示:
true
prac.User@7291c18f
3
1
w
總結
以上是生活随笔為你收集整理的java向量vector类,java数据结构——Vector(向量类)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中耳炎-穿刺疼吗?
- 下一篇: php银盾算法,盾灵商品推广系统