一非迹、List接口
1,List接口:存儲有序的纯趋,可以重復(fù)的元素.---相當(dāng)于“動態(tài)”數(shù)組
2憎兽,方法:刪除remove(int index) 修改set(int index,Object obj) 獲取get(int index)插入add(int index,Object obj)
3,添加進(jìn)List集合中的元素(或?qū)ο螅┧诘念愐欢ㄒ貙慹quals()方法
ArrayList(主要的實(shí)現(xiàn)類)
LinkedList(更適用于頻繁的插入吵冒、刪除操作)
Vector(古老的實(shí)現(xiàn)類纯命、線程安全的,但效率要低于ArrayList)
二痹栖、ArraList
1亿汞,ArrayList類支持3個(gè)構(gòu)造方法。
//1揪阿,Arraylist() 這個(gè)構(gòu)造方法構(gòu)造了一個(gè)空的鏈表
List list1 =new ArrayList();
// 2疗我,ArrayList(Collection<? extends E> c) 這個(gè)構(gòu)造方法構(gòu)造了一個(gè)包含指定元素集合的鏈表,字符E表示集合中元素的類型。
ArrayList list2 =new ArrayList();
//3,ArrayList(int initialCapacity) 構(gòu)造了一個(gè)指定大小但內(nèi)容為空的鏈表图甜。initialCapacity參數(shù)就是初始容量大小碍粥。
ArrayList list3 =new ArrayList(7);
注意:ArrayList類只支持對象類型,不支持 基礎(chǔ)數(shù)據(jù)類型黑毅。就是說ArrayList對象只能存放對象嚼摩,不能存放基礎(chǔ)數(shù)據(jù)類型的數(shù)據(jù)。
2矿瘦,ArrayList常用方法
增加元素到鏈表中
boolean add(Element e)? // 增加指定元素到鏈表尾部.
void add(int index, Element e) // 第一位是0? 增加指定元素到鏈表指定位置.
從鏈表中刪除元素
void clear()? //從鏈表中刪除所有元素.
E remove(int index)? // 刪除鏈表中指定位置的元素.
protected void removeRange(int start, int end) // 刪除鏈表中從某一個(gè)位置開始到某一個(gè)位置結(jié)束的元素枕面。
獲取鏈表中的元素
E get(int index)
獲取鏈表中指定位置處的元素.
Object[] toArray()
獲取一個(gè)數(shù)組,數(shù)組中所有元素是鏈表中的元素.(即將鏈表轉(zhuǎn)換為一個(gè)數(shù)組)
修改某個(gè)元素
E set(int index, E element)
將鏈表中指定位置上的元素替換成新元素缚去。
搜索元素
boolean contains(Object o)
如果鏈表包含指定元素潮秘,返回true.
int indexOf(Object o)
返回元素在鏈表中第一次出現(xiàn)的位置,如果返回-1易结,表示鏈表中沒有這個(gè)元素枕荞。
int lastIndexOf(Object o)
返回元素在鏈表中最后一次出現(xiàn)的位置,如果返回-1搞动,表示鏈表中沒有這個(gè)元素躏精。
檢查鏈表是否為空
boolean isEmpty()
返回true表示鏈表中沒有任何元素.
獲取鏈表大小
int size()
返回鏈表長度(鏈表包含元素的個(gè)數(shù)).
3,循環(huán)遍歷數(shù)組
ArrayList list =new ArrayList();
// 遍歷arraylist中的元素
// 第1種方法: 循環(huán)使用元素的索引和鏈表的大小
for (int i =0; i < list.size(); i++) {
System.out.println("Index: " + i +" - Item: " + list.get(i));
}
// 第2種方法:使用foreach循環(huán)
for (String str : list) {
System.out.println("Item is: " + str);
}
// 第3種方法:使用迭代器
// hasNext(): 返回true表示鏈表鏈表中還有元素
// next(): 返回下一個(gè)元素
for (Iterator it = list.iterator(); it.hasNext();) {
System.out.println("Item is: " + it.next());
}
三鹦肿、LinkedList
1,LinkedList簡介
LinkedList 是一個(gè)繼承于AbstractSequentialList的雙向鏈表矗烛。它也可以被當(dāng)作堆棧、隊(duì)列或雙端隊(duì)列進(jìn)行操作箩溃。
LinkedList 實(shí)現(xiàn) List 接口瞭吃,能對它進(jìn)行隊(duì)列操作碌嘀。
LinkedList 實(shí)現(xiàn) Deque 接口,即能將LinkedList當(dāng)作雙端隊(duì)列使用歪架。
LinkedList 實(shí)現(xiàn)了Cloneable接口股冗,即覆蓋了函數(shù)clone(),能克隆牡拇。
LinkedList 實(shí)現(xiàn)java.io.Serializable接口魁瞪,這意味著LinkedList支持序列化,能通過序列化去傳輸惠呼。
2导俘,構(gòu)造函數(shù)
// 默認(rèn)構(gòu)造函數(shù)
LinkedList()
// 創(chuàng)建一個(gè)LinkedList,保護(hù)Collection中的全部元素剔蹋。
LinkedList(Collection collection)
3旅薄,基本方法
boolean? ? ? add(E object)
void? ? ? ? ? add(int location, E object)? 在指定位置插入一個(gè)元素。
boolean? ? ? addAll(Collection<? extends E> collection)
boolean? ? ? addAll(int location, Collection<? extends E> collection)
void? ? ? ? ? addFirst(E object)? 在鏈表頭部插入一個(gè)元素泣崩。
void? ? ? ? ? addLast(E object)? 在鏈表尾部添加一個(gè)元素少梁。
void? ? ? ? ? clear()
Object? ? ? ? clone()
boolean? ? ? contains(Object object)
Iterator<E>? descendingIterator()
E? ? ? ? ? ? element()
E? ? ? ? ? ? get(int location)? 從當(dāng)前鏈表中獲取指定位置的元素。
E? ? ? ? ? ? getFirst()? 從當(dāng)前鏈表中獲取第一個(gè)元素矫付。
E? ? ? ? ? ? getLast()? 從當(dāng)前鏈表中獲取最后一個(gè)元素凯沪。
int? ? ? ? ? indexOf(Object object)
int? ? ? ? ? lastIndexOf(Object object)
ListIterator<E>? ? listIterator(int location)
boolean? ? ? offer(E o)
boolean? ? ? offerFirst(E e)
boolean? ? ? offerLast(E e)
E? ? ? ? ? ? peek()
E? ? ? ? ? ? peekFirst()
E? ? ? ? ? ? peekLast()
E? ? ? ? ? ? poll()
E? ? ? ? ? ? pollFirst()
E? ? ? ? ? ? pollLast()
E? ? ? ? ? ? pop()
void? ? ? ? ? push(E e)
E? ? ? ? ? ? remove()? 從當(dāng)前鏈表中移除指定的元素。
E? ? ? ? ? ? remove(int location) 從當(dāng)前鏈表中移除指定位置的元素买优。
boolean? ? ? remove(Object object)
E? ? ? ? ? ? removeFirst()
boolean? ? ? removeFirstOccurrence(Object o)
E? ? ? ? ? ? removeLast()
boolean? ? ? removeLastOccurrence(Object o)
E? ? ? ? ? ? set(int location, E object)
int? ? ? ? ? size()
<T> T[]? ? ? toArray(T[] contents)
Object[]? ? toArray()
4妨马、遍歷
// 默認(rèn)構(gòu)造函數(shù)LinkedList()
List list =new LinkedList<>();
list.add("1");
list.add("2");
//第一種,通過迭代器遍歷杀赢。即通過Iterator去遍歷烘跺。
for(Iterator iter = list.iterator(); iter.hasNext();){
String t= (String) iter.next();
}
//第二種 通過快速隨機(jī)訪問遍歷LinkedList
int size = list.size();
for (int i=0; i
String t =(String)list.get(i);
}
//第三種 通過另外一種for循環(huán)來遍歷LinkedList
for (String t:list){
System.out.println(t);
}
四、Vector
1脂崔,簡介
Vector 可實(shí)現(xiàn)自動增長的對象數(shù)組滤淳。
java.util.vector提供了向量類(Vector)以實(shí)現(xiàn)類似動態(tài)數(shù)組的功能。
創(chuàng)建了一個(gè)向量類的對象后砌左,可以往其中隨意插入不同類的對象脖咐,即不需顧及類型也不需預(yù)先選定向量的容量,并可以方便地進(jìn)行查找汇歹。
對于預(yù)先不知或者不愿預(yù)先定義數(shù)組大小屁擅,并且需要頻繁地進(jìn)行查找,插入秤朗,刪除工作的情況,可以考慮使用向量類笔喉。
2取视,構(gòu)造方法:?
public vector()?
publicvector(intinitialcapacity,int capacityIncrement)?
publicvector(intinitialcapacity)
使用第一種方法系統(tǒng)會自動對向量進(jìn)行管理硝皂,若使用后兩種方法,則系統(tǒng)將根據(jù)參數(shù)作谭,initialcapacity設(shè)定向量對象的容量(即向量對象可存儲數(shù)據(jù)的大谢铩),當(dāng)真正存放的數(shù)據(jù)個(gè)數(shù)超過容量時(shí)折欠。系統(tǒng)會擴(kuò)充向量對象存儲容量贝或。
參數(shù)capacityincrement給定了每次擴(kuò)充的擴(kuò)充值。當(dāng)capacityincrement為0的時(shí)候锐秦,則每次擴(kuò)充一倍咪奖,利用這個(gè)功能可以優(yōu)化存儲。
3酱床,基本方法
插入功能
(1)adddElement(Object obj)??將obj插入向量的尾部羊赵。obj可以是任何類型的對象。對同一個(gè)向量對象扇谣,亦可以在其中插入不同類的對象昧捷。但插入的應(yīng)是對象而不是數(shù)值,所以插入數(shù)值時(shí)要注意將數(shù)組轉(zhuǎn)換成相應(yīng)的對象罐寨。
例如:要插入整數(shù)1時(shí)靡挥,不要直接調(diào)用v1.addElement(1),正確的方法為:
Vector v1 =new Vector();
Integer integer1 =newInteger(1);
v1.addElement(integer1);
(2)setElementAt(Object obj,int index)? ? 將index處的對象設(shè)置成obj,原來的對象將被覆蓋鸯绿。?
(3)?insertElementAt(Object obj,int index)? ? 在index指定的位置插入obj跋破,原來對象以及此后的對象依次往后順延。
刪除功能:?
(1) void removeElement(Object obj)
從向量中刪除obj,若有多個(gè)存在楞慈,則從向量頭開始試幔烛,刪除找到的第一個(gè)與obj相同的向量成員。
(2)? void removeAllElement(); 刪除向量所有的對象
(3)? void removeElementAt(int index)? 刪除index所指的地方的對象
查詢搜索功能:?
(1)int indexOf(Object obj) 從向量頭開始搜索obj,返回所遇到的第一個(gè)obj對應(yīng)的下標(biāo)囊蓝,若不存在此obj,返回-1.
(2) int indexOf(Object obj,int index)? 從index所表示的下標(biāo)處開始搜索obj.
(3) int lastindexOf(Object obj) 從向量尾部開始逆向搜索obj.
(4) int lastIndex(Object obj,int index) 從index所表示的下標(biāo)處由尾至頭逆向搜索obj.
(5)synchornized firstElement()? 獲取向量對象中的首個(gè)obj
(6)Object lastElement()? 獲取向量對象的最后一個(gè)obj
4饿悬,遍歷
Vector hs =new Vector();
hs.add("aa");
hs.add("bb");
//第一種方法
Iterator iterator = hs.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
//第二種方法
Enumeration elements = hs.elements();
while (elements.hasMoreElements()) {
System.out.println(elements.nextElement());
}