1.:
Collection:(在util包中)
Set:(序、元素不可重複)
List:(序、可重複;通過角標索引):
ArrayList:底層資料類型為數組,增刪慢,尋找(訪問)快
LinkedList:底層資料類型為鏈表;增刪快,尋找(訪問)慢。
Vector:底層資料類型為數組;元老層級,安全執行緒,但是增刪和尋找都不快,子類:Stack(先進後出)。
2. 集合:長度可變,可存不同資料類型,只儲存物件。
數組:長度不可變,可存同一種資料類型,儲存物件和基礎資料型別 (Elementary Data Type)。
3. 注意:數組、StringBuffer、乃至後文描述的各種集合類型,都是一種可以儲存資料以及對象的“容器”。
Java用集合類來容納不同種類的資料,這種容納是建立在未知的基礎上,即Java要用有限種類的集合類,來容納無限種類的資料對象。
分類:Java的集合類可以分為三類:集、列表和映射
4. 列表(List)
List列表區分元素的順序,即List列表能夠精確的控制每個元素插入的位置,使用者能夠使用索引(元素在List中的位置)來訪問List中的元素。和Set集合的不同,List允許包含重複元素。
5.斜體標識的是介面,虛線箭頭表示“實現”關係
需注意:
JavaSDK不提供直接繼承自Collection的類,Java SDK提供的類都是繼承自Collection的“子介面”。
Collection介面有多個子介面,其中最重要的兩個java.util.Set和java.util.List分別描述集Set和列表List。
Collection中的方法:
publicboolean add(E e):向集合中添加一個元素,加入成功返回ture。在其子介面中方法發生了分化,比如:Set介面添加重複元素時會被拒絕並返回false,而List介面則會接受重複元素並返回ture。
publicboolean remove(Object o) :從集合中刪除指定元素
publicint size():返回元素個數,即遍曆集合。
public booleancontains(Object obj):判斷是否包含指定元素
publicboolean isEmpty():判斷集合是否為空白
publicObject[] toArray():返回包含當前集合中所有元素上的數組。
public void clear():刪除所有元素
6. 不論Collection的實際類型如何,它都支援一個方法—public Iteratoriterator();該方法(iterator為一個介面,包含三個方法)返回一個列舉程式(迭代器)對象,使用該方法即可遍曆Collection中的每一個元素。用法:
方法一:
Iteratorit = c.iterator(); //c為集合對象
While(it.hasNext()){//hasNext()方法判斷是否還有下一個元素。
Object obj = it.next();//next()擷取下一個元素,返回一個對象(Object),一開始,指標都指在第一個元素的前面。
}
方法二:
for(Iteratorit = c.iterator();it.hasNext();){
Object obj = it.next();
}
方法二更好一些,一是代碼簡練;二是new的it對象在迴圈完了就不用了,while迴圈還保留著,但是for迴圈中的可以被記憶體回收機制收回。
7. java.util.List介面描述的是列表結構,允許程式員對列表元素的插入位置進行精確控制,並增加了根據元素索引來訪問元素、搜尋元素等功能。在繼承父介面Collection的基礎之上,List介面新增的相應方法:
voidadd(int index, E element):在索引號後插入對象
boolean add(Ee):將對象e插到鏈表最後
Eremove(int index):刪除指定索引號元素
booleanremove(Object o):刪除列表第一個指定內容元素
Eget(int index):得到指定索引號的元素,沒有用到泛型時,傳回值類型是Object,所以在這種情況下要根據實際,把這個返回對象強制轉換為它原來的類型。
intsize():同父介面
intindexOf(Object obj):找到Object元素,返回它的索引值
List<E>subList(int fromIndex, int toIndex):截子鏈,(有開頭結尾的方法,都是包含開頭不包含結尾)
voidclear()
Java.util.List介面的實作類別(子類)有多個,分別體現了列表的不同分化形式。
ArrayList、Vector、Stack、LinkedList
8.Vctor類
實線了list介面,對於資料類型結構中的“向量”。
@@@構造方法:
Vctor():構造一個空向量,並設定其初始值為10,標準容量增量為0;
Vctor(intinitialCapacity):使用指定初始值為和容量增量為0構造一個空向量;
Vctor(intinitialCaption,int capacipyIncrement):使用已知初始值為和容量增量構造一個空向量。在實際項目中最常用。
Vctor(<E>c):該構造方法體現了java的新特性—泛型,只有在使用Vctor前,明確知道其中容納對象的類型,才可以使用這種類型的構造方法。
@@@其他方法:
voidadd(E obj):向集合中添加一個元素,體現泛型特性
insertElementAt(Eobj,int index):在指定索引處添加元素
setElementAt(Eobj,int index):替換指定索引處元素,與上一個方法很相似
publicboolean removeElement(Object obj) :從集合中刪除指定元素,可刪除第一個obj對象,用來表示是否在Vctor中找到並刪除指定對象。
void removeElementAt(intindex):刪除指定索引元素
void removeAllElement():刪除所有元素,可刪除Vctor中所有對象,該Vctor對象的size重設為0
publicint size():返回元素個數,即遍曆集合。
EelementAt(int index):依次訪問Vctor中各元素,可通過此方法將對象裡索引號為i的元素及泛型或Object返回
Vctor裡的方法參數中插入的位置(角標)在對象後面。
9.先進後出的Stack類
Stack是Vector類的子類,特點:“後進先出”(Last InFirst Out)類型的容器,即最後一個被“壓(push)”進堆棧中的對象,會被第一個“彈(pop)”出來。
@@@構造方法
Stack():用於建立支援“後進先出”訪問方式的對象
例:Stack st=new Stack();
Stack <String> st = newStack();
@@@其他方法
Epeek() 返回棧頂元素,但沒有彈出棧頂元素
E pop()彈出棧頂元素,並返回其中的對象。
Epush(E item) 向堆棧頂端壓入item對象,同時將item對象返回。
booleanempty() 判斷堆棧是否為空白,如果該堆棧為空白,返回true,反之返回false。
注意:由於Stack繼承了Vector類,所以以下語句從文法上來講,不會有問題。但卻破壞了堆棧“後進先出”的特性,所以,不推薦使用。
st.addElement("badusage1");
st.addElement("badusage2");
st.addElement("badusage3");
for(inti=0;i<st.size();i++){
System.out.println(st.elementAt(i));
}
10.LinkedList類:鏈式儲存方方式
邏輯上相鄰的兩個元素在物理上不相鄰,通過“鏈條”串連
@@@構造方法:
LinkedList()
LinkedList(Collectionc):Collection是java裡線性表類集合的基類這種構造方法可以把Collection內的各元素裝載到LinkedList對象裡。
LinkedList(<E>C)
@@@其他方法:
添加元素:
void addFirst(Eobj)和void addLast(E obj):在List介面中add的方法的基礎上擴充了:在表頭和表尾添加元素。
擷取元素:
E getFirst(E obj)和ObjectgetLast(E obj):在List介面中get的方法的基礎上擴充了:在表頭和表尾擷取元素。
刪除元素:
E removeFirst(E obj)和ObjectremoveLast(E obj):在List介面中remove的方法的基礎上擴充了:在表頭和表尾添加元素。
11.數組:
(1)可以根據數組起始地址和其中元素的索引號,很快地定位到數組中的任意元素
(2)插入、刪除元素等操作效率底
鏈表:
(1)鏈表中元素訪問的代價要比數組高。
(2)能很方便地完成元素的插入和刪除工作