學(xué)習(xí)記錄之集合
什么是集合
集合與數(shù)組一樣,可以保存一組元素,并且提供了操作元素的相關(guān)方法,使用更方便.
java集合框架中相關(guān)接口
java.util.Collection接口:
java.util.Collection是所有集合的頂級(jí)接口.Collection下面有多種實(shí)現(xiàn)類,因此我們有更多的數(shù)據(jù)結(jié)構(gòu)可供選擇.
Collection下面有兩個(gè)常見的子接口:
java.util.List:線性表.是可重復(fù)集合,并且有序.
java.util.Set:不可重復(fù)的集合,大部分實(shí)現(xiàn)類是無序的.
常用方法:
這里可重復(fù)指的是集合中的元素是否可以重復(fù),而判定重復(fù)元素的標(biāo)準(zhǔn)是依靠元素自身equals比較的結(jié)果.為true就認(rèn)為是重復(fù)元素;
集合與元素equals方法相關(guān)的方法
集合存放的是元素的引用
集合只能存放引用類型元素,并且存放的是元素的引用
集合間的操作:
集合提供了如取并集,刪交集,判斷包含子集等操作;
集合的遍歷:
Collection提供了統(tǒng)一的遍歷集合方式:迭代器模式
Iterator iterator()
該方法會(huì)獲取一個(gè)用于遍歷當(dāng)前集合元素的迭代器.
java.util.Iterator接口:
迭代器接口,定義了迭代器遍歷集合的相關(guān)操作.
不同的集合都實(shí)現(xiàn)了一個(gè)用于遍歷自身元素的迭代器實(shí)現(xiàn)類,我們無需記住它們的名字,用多態(tài)的角度把他們看做為Iterator即可.
迭代器遍歷集合遵循的步驟為:問,取,刪.其中刪除元素不是必要操作:
迭代器遍歷過程中不得通過集合的方法增刪元素
增強(qiáng)型for循環(huán)
JDK5之后推出了一個(gè)特性:增強(qiáng)型for循環(huán)
也稱為新循環(huán),使得我們可以使用相同的語法遍歷集合或數(shù)組.
- 語法:
泛型:
JDK5之后推出的另一個(gè)特性:泛型
泛型也稱為參數(shù)化類型,允許我們?cè)谑褂靡粋€(gè)類時(shí)指定它當(dāng)中屬性,方法參數(shù)或返回值的類型.
- 泛型在集合中被廣泛使用,用來指定集合中的元素類型.
- 有泛型支持的類在使用時(shí)若不指定泛型的具體類型則默認(rèn)為原型Object
List集:
java.util.List接口,繼承自Collection.
List集合是可重復(fù)集,并且有序,提供了一套可以通過下標(biāo)操作元素的方法
常用實(shí)現(xiàn)類:
- java.util.ArrayList:內(nèi)部使用數(shù)組實(shí)現(xiàn),查詢性能更好.
- java.util.LinkedList:內(nèi)部使用鏈表實(shí)現(xiàn),首尾增刪元素性能更好.
List集合常見方法:
get()與set():
重載的add()和remove()
subList()方法
集合與數(shù)組的轉(zhuǎn)換:
集合轉(zhuǎn)換為數(shù)組
Collection提供了一個(gè)方法:**toArray**,可以將當(dāng)前集合轉(zhuǎn)換為一個(gè)數(shù)組
數(shù)組轉(zhuǎn)換為L(zhǎng)ist集合:
數(shù)組的工具類Arrays提供了一個(gè)靜態(tài)方法**asList()**,可以將一個(gè)數(shù)組轉(zhuǎn)換為一個(gè)List集合
集合的排序
java.util.Collections類
Collections是集合的工具類,里面定義了很多靜態(tài)方法用于操作集合.
Collections.sort(List list)方法
可以對(duì)List集合進(jìn)行自然排序(從小到大)
集合的排序
java.util.Collections類
Collections是集合的工具類,里面定義了很多靜態(tài)方法用于操作集合.
Collections.sort(List list)方法
可以對(duì)List集合進(jìn)行自然排序(從小到大)
排序自定義類型元素
實(shí)際開發(fā)中,我們并不會(huì)讓我們自己定義的類(如果該類作為集合元素使用)去實(shí)現(xiàn)Comparable接口,因?yàn)檫@對(duì)我們的程序有侵入性.
侵入性:當(dāng)我們調(diào)用某個(gè)API功能時(shí),其要求我們?yōu)槠湫薷钠渌~外的代碼,這個(gè)現(xiàn)象就是侵入性.侵入性越強(qiáng)的API越不利于程序的后期可維護(hù)性.應(yīng)當(dāng)盡量避免.
重載的Collections.sort(List list,Comparator c)方法
Map 查找表
Map體現(xiàn)的結(jié)構(gòu)是一個(gè)多行兩列的表格,其中左列稱為key,右列稱為value.
Map總是成對(duì)保存數(shù)據(jù),并且總是根據(jù)key獲取對(duì)應(yīng)的value.因此我們可以將查詢的條件作為key查詢對(duì)應(yīng)的結(jié)果作為value保存到Map中.
Map有一個(gè)要求:key不允許重復(fù)(equals比較的結(jié)果)
java.util.Map接口,是所有Map的頂級(jí)接口,規(guī)定了Map的相關(guān)功能.
常用實(shí)現(xiàn)類:
java.util.HashMap:稱為散列表,使用散列算法實(shí)現(xiàn)的Map,當(dāng)今查詢速度最快的數(shù)據(jù)結(jié)構(gòu).
java.util.TreeMap:使用二叉樹實(shí)現(xiàn)的Map
Map的遍歷
Map支持三種遍歷方式:
遍歷所有的key
遍歷所有的鍵值對(duì)
遍歷所有的value(相對(duì)不常用)
總結(jié)
java.util.Map 查找表
特點(diǎn):體現(xiàn)的結(jié)構(gòu)是一個(gè)多行兩列的表格,其中左列稱為key,右列稱為value。
Map中的key不允許重復(fù)。判定重復(fù)的標(biāo)準(zhǔn)是根據(jù)key的equals方法判定的。
常用的實(shí)現(xiàn)類:java.util.HashMap?散列表
常用方法: