集合類(常用集合類、Iterator迭代器、)

一、集合類是什麼?爲什麼要使用集合類?
java集合類就像是一個容器,專門用來儲存java類的對象。
java數組可以保存多個對象,但是一旦建立,數組的長度是無法改變的。爲了保存這些數目不確定的對象,JDK提供了一系列特殊的類,這些類可以存儲任意類型的對象,並且長度可變,稱爲集合。這些類全都位於java.util包中,使用時需要注意包的導入。

二、集合的區分
集合按照存儲結構分爲兩大類,單列集合Collection和雙列集合Map。
下面是整個集合類的繼承體系(來源自傳智播客)
這裏寫圖片描述
兩種集合的特點具體如下:
Collection(單列)接口有兩個子接口List和Set。
List的特點是元素有序,元素可重複。Set的特點是元素無序不可重複。
List主要實現類是ArrayList和LinkedList,Set接口主要實現類是HashSet和TreeSet。
Map(雙列)是用於存儲鍵值映射關係的元素,主要實現接口是HashMap,TreeMap。
使用Map的時候可以通過Key找到指定的Value。

三、Collection接口

Collection接口的一些方法

add(xx)//像集合中添加一個元素 xx爲元素
addAll(xx)//將指定的Collection接口中的所有元素添加到該集合 xx爲指定Collection
clear()//刪除該集合中的所有元素
remove(xx)//刪除該集合中的指定元素,xx爲元素
removeAll(xx)//刪除指定集合中的所有元素,xx爲指定集合
isEmpty()//判斷該集合是否爲空
contains(xx)//判斷該結合中是否包含某個元素   xx爲元素
containsAll(xx)//判斷該集合中是否包含指定集合中的所有元素 xx爲集合
iterator()//返回該集合的元素上進行迭代的迭代器 ,用於遍歷該集合所有元素
size()//獲取該集合元素個數

四、List接口

是Collection接口的一個分支,習慣將實現了list接口的對象成爲list集合。
該集合允許出現重複元素,所有元素通過線性方式存儲,可以通過索引來訪問指定元素。該集合是元素有序的,即元素的存入順序和取出順序一致。

add(xx,yy)//將元素yy插入到List集合的xx處
addAll(xx,yy)//將集合yy包含的所有元素插入到List集合的xx處
get(x)//返回集合索引x處的元素
remove(x)//刪除x所引出的元素
set(x,y)//將x處的元素換爲y,並將替換後的元素返回
indexOf(x)//返回對象x 在list集合中出現的位置索引
lastIndexOf(x)//返回對象x在list集合中最後一次出現的位置索引
subList(x,y)//返回將索引x(包括)到y(不包括)處所有元素集合組成的子集合

五、ArrayList集合

ArrayList是List的一個實現類,是最常見的一種集合。在該集合內部封裝了一個長度可變的數組對象,當存入的元素超過數組長度時,ArrayList會在內存中分配一個更大的數組來存儲,因此可將ArrayList看做一個長度可變的數組
該集合中的大部分方法都是繼承兩個父類的,其中add方法和get方法實現了元素的存取。
但是該方法的底層是使用數組保存的,增加和刪除時會導致新數組的創建。因此不適合做大量的增刪操作。但是該集合可以通過索引的方式來訪問元素,因此使用該集合查找元素很便捷。

六、LinkedList集合
該集合改善了ArrayList集合增刪不方便的侷限。內部維護了一個雙向循環鏈表,鏈表中的每一個元素都使用引用的方式記住他的前後元素,從而將所有元素連接起來。
該集合爲了提高增刪效率,還專門定義了一些增刪特有方法。

add(x,y)//在此列表中x位置插入y元素
addFirst(x)//將x元素插入到此列表開頭
addLast(x)//將x元素插入到此列表結尾
getFirst()//獲取第一個元素
getLast()//返回此列表最後一個元素
removeFirst()//移除並返回此列表第一個元素
removeLast()//移除並返回此列表最後一個元素

七、Iterator接口
這是JDK專門提供的用來遍歷集合中所有元素的接口。
該接口不用來存儲元素,而是用來迭代訪問(遍歷)Collection中的元素,因此又稱Iterator對象又稱爲迭代器。
迭代器的使用

ArrayList list=new ArrayList();
list.add("data-1");
list.add("data-2");
list.add("data-3");
list.add("data-4");
Iterator it=list.iterator();
while (it.hasNext()){
    Object obj=it.next();
    System.out.println(obj);
}

需要注意的是,通過迭代器獲取ArrayList集合中的元素時,都會將這些元素當做Object類型來看待,如果想得到特定的類型元素,需要進行強制類型轉換。
在使用迭代器對元素進行迭代時,如果調用了集合對象的remove方法去刪除元素會造成異常。如果使用迭代器本身的remove方法則可解決問題。因爲迭代器本身的remove方法刪除元素導致的迭代次數的變化,對於迭代器對象本身來說時可以預知的。

八、foreach循環
該循環的作用是替代Iterator迭代器,因爲該迭代器使用實在是比較麻煩。foreach循環是for循環更加簡潔的體現,也成增強for循環。
foreach循環用於便利數組或集合中的元素

for(容器中元素類型 臨時變量:容器變量){
    執行語句
}
//foreach循環不需要獲取容器長度,不需要根據索引來訪問容器中的元素,會自動遍歷容器中的每一個元素

但是該方法也有侷限,使用該方法循環遍歷集合和數組時,只能訪問集合中的元素,不能修改。for循環是可以修改的。

九、ListIterator接口

該接口的出現是因爲Iterator接口只能實現正向迭代,而ListIterator在Iterator的基礎上增加了一些特有方法。

add(x)//將元素插入列表(可選操作)
hasPrevious()//如果以逆向遍歷列表,列表迭代器有多個元素,則返回true
previous()//返回列表中的前一個元素
remove()//從列表中移除有next或previous返回的最後一個元素(可選操作)

該迭代器只能用於List集合

十、Enumeration接口

這個接口是沒有Iterator接口之前的方法,現在有了還學習他是因爲很多程序中依然在使用。
jdk中提供了一個Vector集合,該集合是List的一個實現類,用法和ArrayList完全相同,區別在於Vector集合是線程安全的,ArrayList不安全。在Vector類中提供了一個elements( )方法用於反回Enumeration對象,通過該對象就可以遍歷結合中的元素

Vector v=new Vertor();
v.add("jack");
v.add("rose");
v.add("tom");
Enumeration en=v.elements();
while(en.hasMoreElements()){
    Object obj=en.nextElement();
    System.out.println(obj);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章