Collection集合框架
java的集合框架
java.util.Collection接口
1.Collection:是所有集合的頂級接口,里面規(guī)定了集合操作元素的相關(guān)功能方法集合與數(shù)組一樣,用于存儲一組元素,但是集合又多個不同的實現(xiàn)類來實現(xiàn)不同的數(shù)據(jù)結(jié)構(gòu)Collection下面有兩個常見的子接口
*1.1 java.util.List:?*線性表,特點:可以存放重復(fù)元素并且有序,可以通過下標(biāo)操作
List常見的實現(xiàn)類:
1.1.1:java.util.ArraysList
內(nèi)部使用數(shù)組實現(xiàn),查詢性能更好
1.1.2java.util.LinkedList
內(nèi)部用鏈表實現(xiàn),增刪元素性能更好,首尾增刪元素性能最佳
(這里的重復(fù)元素判定是依靠元素自身equals方法比較的結(jié)果而定)
1.2:?java.util.Set:不可以重復(fù)的集合,并且無序
Set常見的實現(xiàn)類:java.util.HashSet
HashSet底層就是HashMap
隊列繼承Collection所以隊列本身也是一種集合:
Collection c = new ArrayList();
boolean add(E e):向當(dāng)前集合添加一個元素,成功添加后返回true否則返回false

int size():返回當(dāng)前集合的元素個數(shù)

boolean isEmpty():判斷集合是否為空集,當(dāng)集合的size為0時,isEmpty返回true

c.clear():清空集合
boolean contains(Object o):判斷當(dāng)前集合是否包含給定元素
集合的contains判斷包含時的依據(jù)為:給定元素是否與集合中現(xiàn)有的元素存在equals比較為true的情況,存在則認為包含

remove方法刪除元素時也是刪除與集合中equals比較為true的,元素對于List集合而言,重復(fù)元素僅刪除一次

集合只能存放引用類型元素,并且存放的是元素的引用(地址)

boolean addAll(Collection c):將給定集合中的所有元素添加到當(dāng)前集合

boolean containsAll(Collection e):判斷當(dāng)前集合是否包含給定集合中的所有元素

removerAll:刪除當(dāng)前集合中與給定集合的共有元素

集合的遍歷
Collection提供了一個方法
Iterator iterator()
該方法會返回一個用于遍歷當(dāng)前集合的迭代器實現(xiàn)類,使用它可以對集合進行遍歷
java.util.Iterator接口:迭代器
迭代器中規(guī)定了遍歷集合元素所需要的相關(guān)方法,使用迭代器遍歷遵循的原則為:問,取,刪,其中刪除元素不是遍歷過程中的必要操作
注:不同的集合實現(xiàn)類都提供一個用于遍歷自身的迭代器實現(xiàn)類,我們不需要知道它們的名字,用多態(tài)的思想把它們看成Iterator進行操作即可.
JDK5推出時推出了一個新特性:泛型
泛型又稱為參數(shù)實例化類型,允許我們我們在使用一個類型的時候去指定它里面某些屬性或方法的參數(shù)和返回值的類型,使得我們使用這個類時更符合我們的需求
泛型在集合中被大量使用,用于規(guī)定集合中的元素類型

java.util.List接口:
List list = new ArrayList<>();
E get(int index):獲取指定下標(biāo)所對應(yīng)的元素
E set(int index,E e):將給定元素設(shè)置到指定位置,返回值為該位置原有元素
void add(int index,E e):將給定元素添加到指定位置,原位置及后續(xù)元素順序向后移動

E remove(int index):刪除并返回指定位置的元素

List subList(int start,int end): 獲取當(dāng)前集合指定范圍內(nèi)的子集

增強型for循環(huán) JDK5推出時推出的一個新特性
它也稱為:增強for循環(huán)
新循環(huán)不取代傳統(tǒng)的for循環(huán)的工作,它只是用相同的語法去遍歷集合或數(shù)組使用
新循環(huán)是編譯器認可,而不是java虛擬機認可,編譯器在編譯源代碼時發(fā)現(xiàn)使用新循環(huán)遍歷數(shù)組時,會將代碼改為普通的for循環(huán)進行
新循環(huán)遍歷集合會被編譯器修改為迭代器遍歷 因此在使用新循環(huán)遍歷過程中,仍然不能通過集合的方法增刪元素
集合轉(zhuǎn)換為數(shù)組:Collection提供了一個方法:toArray(),可以將當(dāng)前集合轉(zhuǎn)換為一個數(shù)組
將當(dāng)前集合轉(zhuǎn)換為數(shù)組,該方法要求傳入一個數(shù)組,如果該數(shù)組可以用(數(shù)組長度>=集合的size時)會將當(dāng)前集合元素存入該數(shù)組后再將該數(shù)組返回
如果不可以用會創(chuàng)建一個與參數(shù)數(shù)組同類型并且長度與size一致的數(shù)組并將元素存放后返回

數(shù)組轉(zhuǎn)換為集合:數(shù)組的工具類:Arrays提供了一個靜態(tài)方法:asList,可以將一個數(shù)組轉(zhuǎn)換為一個List集合
通過數(shù)組轉(zhuǎn)化而來的集合,對該集合的元素操作就是對原數(shù)組的操作這一點需要特別注意!
由于數(shù)組是定長的,因此從從數(shù)組轉(zhuǎn)換的集合不可以調(diào)用增刪元素等會影響數(shù)組的長度,否則會拋出異常:UnsupportedOperationException
如果想向集合中增刪元素,需要自行創(chuàng)建一個集合,然后將原集合元素導(dǎo)入到該集合即可
所有的集合元素都支持一個參數(shù)類型為Collection的構(gòu)造方法,作用是在創(chuàng)建當(dāng)前集合的同時包含給定集合中的所有元素


Comparable和Comparator區(qū)別
Comparable, Comparator都可以用來實現(xiàn)集合中元素的比較、排序的接口
Comparable:位于包java.lang下,是在集合內(nèi)部定義的方法,該接口中有一個抽象方法要求實現(xiàn)類重寫,定義該類元素之間的大小關(guān)系,java中很多常用的類都實現(xiàn)了它,比如String,包裝類
Comparator:是比較器的接口,位于包java.util下,是在集合外部定義的方法,實現(xiàn)它就需要重寫compare來定義,因此實現(xiàn)這個接口的類是可比較的,通過這里直接以匿名內(nèi)部類形式創(chuàng)建為,
Collection和Collections的區(qū)別
**Collection:**是所有集合的頂級接口,規(guī)定了所有集合都要具備的功能。集合與數(shù)組一樣,用于保存一組元素,但是實現(xiàn)類眾多(有多種不同的數(shù)據(jù)結(jié)構(gòu))
**Collections:**是個一個工具類,提供了一系列的靜態(tài)方法來輔助容器操作,這些方法包括對容器的搜索、排序、線程安全化等等。
如果你想要了解更多可以點擊: