1. 程式人生 > >程式設計學習筆記之Java相關vector向量的介紹

程式設計學習筆記之Java相關vector向量的介紹

在Java中,有一個包叫java.util,它是一個儲存著各種常用工具類的類庫,其中就包括向量(vector)。向量是一種類似陣列的順序儲存的資料結構,但是它的功能比陣列強大的多。比如,Vector類的物件是允許不同型別大小的元素共存的變長陣列,Vector類的物件不但可以儲存資料,而且還封裝了很多方法來操作這些資料;再比如,建立陣列時需要事先宣告大小,但Vector不需要,因為它是可以在執行時動態增長或縮小的,總的來說,相比陣列,如下情況更適合使用Vector:

1):需要處理的物件數目不定,序列中的元素都是物件或可以表示為物件。

2):需要將不同型別的物件組合成一個序列。

3):需要對物件中的元素做頻繁的插入和刪除。

4):經常需要定位序列中的物件或其它查詢操作。

5):在不同類之間傳遞大量的資料。

如果上面的不好記,那麼只需這樣想就可以了:當我們的序列內的元素是簡單的內建型別,如int、double等時,那麼我們就使用陣列,否則使用Vector。

1、Vector向量類物件的建立

首先介紹Vector向量類常用的建構函式:

第一種

public Vector(); //建立一個響亮物件,預設容量是10個元素。

第二種
public Vector(int initCapacity, int capacityIncrement);
/*這個建構函式的第一個引數initCapacity,表示建立的Vector物件的初始容量【元素數目】;而第二個引數capacityIncrement,表示如果我們建立的這個vector容量不夠了,那麼擴充時應該一次填充多少個多少個元素*/

//比如我們看下面的例子
Vector MyVector = new Vector(100,50);
//上面的程式碼意思是,建立一個MyVector向量容器,初始容量為100個元素,如果在以後的執行中該容器使用完,那麼就以50個元素大小來遞增擴充,比如變成150、200、250等

2、如何對向量容器新增元素

Vector類有兩個方法對向量序列新增元素:

1):

addElement( Object obj ); // 在向量序列的尾部新增新元素。
2):
insertElement( Object obj, int index ); // 在向量序列中的指定位置index處插入新元素obj

下面這個就是使用上述兩種方法的例子程式碼:

Vector MyVector = new Vector(); //建立了一個10個元素大小的Vector向量容器

for( int i=0; i<100; i++ ){
  MyVector.addElement( new MyComplex(0.0, 0.0) ); //其中的MyComplex是我們隨便做的一個複數類
}

MyVector.insertElement( new MyComplex(1.0, 2.0), 50 ); //在這裡我們向第50個位置插入一個新的MyComplex元素
在上面的程式中,我們首先建立一個Vector,裡面啥都沒有,然後在迴圈體中,我們增加了一百個MyComplex類元素,最後我們又在中間插入一個新元素,所以最後MyVector的大小是101個元素!

3,、修改或刪除向量序列中的元素

如果我們要修改(覆蓋)容器序列中的某個元素,可以參考如下方法:

void setElementAt( Object obj, int index ); //將向量序列中index出的元素改換成obj

如果我們要刪除序列中的某個元素,可以參考這個方法:
void removeElementAt(int index); //產出容器序列中第index出的元素,然後把它後面所有的元素往前挪一個,以便補齊

如果我們要刪除序列容器中和obj相同的元素,可以參考這個方法:
boolean removeElement( Object obj ); //刪除容器序列中第一個與obj相同的元素,然後將後面所有的元素前移,如果沒找到與obj相同的元素,即沒有刪除任何東西,那麼該方法返回FALSE,否則返回TRUE。

如果我們要刪除容器中所有的元素,可以參考如下方法:
void removeAllElement();


比如下面的程式程式碼,首先建立一個Vector,然後刪除所有的字串“to”:
Vector MyVector = new Vector(); //建立一個由10個元素大小的空Vector

for( int i=0; i<10; i++ ){
  MyVector.addElement("Welcome");
  MyVector.addElement("to");
  MyVector.addElement("Java");
}

while( MyVector.removeElement("to") );
4、查詢向量序列中的元素

常用於查詢序列中元素的方法如下:

Object elementAt( int index );
該方法返回指定位置index處的元素,需要注意的是,由於返回的是所有類的父類Object,所以在使用之前通常要進行強制型別轉換,以便將返回的物件引用轉換成我們需要的型別,例如下面的使用例子:
String str = (String)MyVector.elementAt(5); //將第5個元素返回,然後轉換成String賦值給我們的str
如果要檢查容器序列中是否包含我們指定的元素obj,可以參考如下方法:
boolean contains(Object obj); //看看是否有obj,如果有,返回TRUE,否則返回FALSE


如果我們要從一個指定位置處向後搜尋,然後返回找到的第一個obj元素,那麼可以參考如下方法:
int indexOf( Object obj, int start_index ); //其中的start_index,就是我們要開始尋找的位置,如果沒有找到物件obj,那麼該方法返回-1

如果我們要從一個指定位置處向前搜尋,然後返回第一個obj元素【即到達指定位置前最後的那個obj元素】位置,那麼可以參考如下方法:
int lastIndexOf( Object obj, int start_index ); //如果沒有找到物件obj,那麼該方法返回-1



讓我們接上一段示例程式碼,寫下下面的程式碼,該程式將尋找序列容器中所有未“Welcome”的元素並將它們的位置輸出:
...

int i=0;
while( (i = MyVector.indexOf( "Welcome", i)) != -1 )
  System.out.println( i );




相關推薦

程式設計學習筆記Java相關vector向量介紹

在Java中,有一個包叫java.util,它是一個儲存著各種常用工具類的類庫,其中就包括向量(vector)。向量是一種類似陣列的順序儲存的資料結構,但是它的功能比陣列強大的多。比如,Vector類的物件是允許不同型別大小的元素共存的變長陣列,Vector類的物件不但可以

併發程式設計學習筆記Java儲存模型(十三)

概述 Java儲存模型(JMM),安全釋出、規約,同步策略等等的安全性得益於JMM,在你理解了為什麼這些機制會如此工作後,可以更容易有效地使用它們. 1. 什麼是儲存模型,要它何用. 如果缺少同步,就會有很多因素會導致執行緒無法立即,甚至永遠無法看到另一個執行緒的操作所產生的結果: 編譯器生成指令的次序,可

JavaSE 學習筆記Java概述(一)

environ 電子 6.0 run javase 有一點 架構 spa form 一、Java的三種技術架構: JAVAEE:Java Platform Enterprise Edition,開發企業環境下的應用程序,主要針對web程序開發; JAVASE:Java P

算法(第四版)學習筆記java實現可以動態調整數組大小的棧

length pub move sta gen font -c @override lifo 下壓(LIFO)棧:可以動態調整數組大小的實現 import java.util.Iterator; public class ResizingArrayStack&l

IDEA 學習筆記 Java項目開發深入學習(1)

java項目 bsp 重構 str 代碼提示 log pan ora tro Java項目開發深入學習(1): 定義編譯輸出路徑: 繼承以上工程配置 重新定義新的項目編譯路徑 添加source目錄:點擊添加,再點擊移除: 編譯項目: 常用快捷鍵總結: Ctr

Introduction to 3D Game Programming with DirectX 12 學習筆記 --- 第一章:向量代數

學習目標: 學習如何使用幾何學和數字描述 Vector; 學習 Vector 的運算方法及其在幾何學上的應用; 熟悉在 DirectXMath library 中的 Vector 相關的類和函式。 1 向量 一個向量代表的是一個擁有大小和方向

併發程式設計學習筆記顯示鎖(十一)

ReentrantLock(重進入鎖)並不是作為內部鎖(synchronized)機制的替代,而是當內部鎖被證明受到侷限時,提供可選擇的高階特性. 1. Lock 和 ReentrantLock Lock介面: public interface Lock { void lock();

併發程式設計學習筆記構建自定義的同步工具(十一)

概述: 在併發程式設計學習筆記之併發工具類(四)中,為大家介紹了幾種同步工具(同步工具就是依靠自己的狀態,調節執行緒是阻塞還是執行用的.),閉鎖、FutureTask、訊號量、關卡. 使用以上的同步工具大部分時候可以滿足我們的需求,但是如果沒能滿足我們需要的功能,可以使用語言和類庫提供的底層

併發程式設計學習筆記原子變數與非阻塞同步機制(十二)

概述 java.util.concurrent包中的許多類,比如Semaphore和ConcurrentLinkedQueue,都提供了比使用Synchronized更好的效能和可伸縮性.這是因為它們的內部實現使用了原子變數和非阻塞的同步機制. 近年來很多關於併發演算法的研究都聚焦在非阻塞演算法(nonb

JavaScript高階程式設計學習筆記事件

1、事件流 事件流描述的是從頁面中接收事件的順序。 事件冒泡 IE的事件流叫做事件冒泡(event bubbling),即事件開始時由最具體的元素(文件中巢狀層次最深的那個節點)接收,然後逐級向上傳播到較為不具體的節點(文件)。(DOM樹向上傳播)(通俗解釋(個人理解: 當一個元素上的事件被觸發的時候,比如

Java學習筆記——Java介紹

1.Java體系: JavaSE:標準版,其他兩個體系的基礎 JavaEE:企業版 JavaME:微型版,適用於消費型別的微型裝置   2.Java三大特性:封裝、繼承、多型   3.Java的特點:面向物件、可移植、安全、動態、多執行緒 可移植,一次編譯,到處執行 JV

併發程式設計學習筆記可伸縮性(九)

很多改進效能的技術增加了複雜度,因此增加了安全和活躍度失敗的可能性. 更糟糕的是,有些技術的目的是改善效能,事實上產生了相反的作用,帶來了其他的效能問題. 資料的正確性永遠是第一位的,保證程式是正確的,然後再讓它更快.只有當你的效能需求和評估標準需要程式執行得更快時,才去進行改進. 在設計併發應用程式的時候,

學習筆記Java執行緒安全雜談(上)——執行緒安全概念和基本方案

執行緒安全問題絕對是併發開發中一個重點中的重點,這篇就來說說執行緒安全相關的一些問題。執行緒安全是什麼概念?這個概念說簡單也簡單,說複雜也複雜,“安全”的概念是什麼,用我個人的話說的淺顯些,就是類/物件本身在多執行緒併發執行的場景下,能夠保證程式的邏輯是可以接受的而不是被

Android程式設計學習筆記 File資料儲存

File檔案可用來存放大量資料,如文字、圖片、音訊、視訊等。 在Android的資料儲存操作和Java中的IO流差不多的用法。 進行File資料儲存的步驟如下: ①開啟一個File物件 ②開啟一個FileOutputStream檔案輸出流,寫入資料 ③開啟一個FileIn

Android程式設計學習筆記 Fragment與Activity的資料傳遞

傳遞方向的不同: ①Activity----->Fragment: 在Activity中建立Bundle資料包,並呼叫Fragment的setArguments(Bundle bundle)方法 ②Fragment----->Activity: 需要在Frag

學習筆記java.io包中的位元組流(上)—— 基本的InputStream和OutputStream

先看下類的宣告: 1 2 public abstract class InputStream implements Closeable public abstract class

演算法(第四版)學習筆記java實現能夠動態調整陣列大小的棧

下壓(LIFO)棧:能夠動態調整陣列大小的實現 import java.util.Iterator; public class ResizingArrayStack<Item> impl

程式設計學習筆記MFC內部組織架構

      MFC全稱是Microsoft Foundation Classes,意為微軟基礎類庫,是一個C++的類庫,裡面封裝了大量的windows API尤其是win32 API函式,因為我們在開發win32應用程式的時候,需要做很多重複的步驟,比如註冊視窗類、初始化視

JDBC程式設計學習筆記資料庫連線池的實現

在JDBC程式設計的時候,獲取到一個數據庫連線資源是很寶貴的,倘若資料庫訪問量超大,而資料庫連線資源又沒能得到及時的釋放,就會導致系統的崩潰甚至宕機。造成的損失將會是巨大的。再看有了資料庫連線池的JDBC,就會較好的解決資源的建立與連線問題,其主要還是針對於連線

C++ 學習筆記——STL 庫 vector

vector 是一種順序容器,可以看作是可以改變大小的陣列。 就像陣列一樣,vector 佔用連續的記憶體地址來儲存元素,因此可以像陣列一樣用偏移量來隨機訪問,但是它的大小可以動態改變,容器會自動處理記憶體分配問題。 在內部,vector 使用動態分配的陣列來儲存元