150天打卡Day22_集合(下篇)
回顧

Collection接口定義了集合所共有的方法
add(E e)向集合中添加元素
addAll(E e)把集合中添加的元素再次全部添加
remove(Object o)將集合中的元素移除(一次只能移除一個(gè))
removeAll(Object o)將移除集合中的所有元素
isEmploy()返回boolean值,判斷集合中的元素是否為空
size()返回int類型,獲取當(dāng)前集合中的元素的個(gè)數(shù)
iterator()遍歷集合中的元素
hasNext()判斷下一個(gè)元素之后還有沒(méi)有值
next()獲取下一個(gè)集合元素
contains()用于判斷指定元素是否被集合包含,包含則為true
泛型
泛型,又稱為是參數(shù)化類型。是JDK1.5之后推出的一個(gè)特性,泛型可以表示屬性的類型,方法參數(shù)的類型以及返回值類型。
?
package sesson13; /* * 泛型,又稱為是參數(shù)化類型,是JDK1.5之后推出的一個(gè)特性 * 泛型可以表示屬性的類型,方法參數(shù)的類型以及返回值類型 */ public class Num <T>{ private T ?numA; private T numB; public Num(T numA, T numB) { super(); this.numA = numA; this.numB = numB; } }
測(cè)試:
public class NumTest { public static void main(String[] args) { Num<Double> n1 = new Num<Double>(1.1, 1.2); } }
泛型的值全都都是引用類型,是基本類型的包裝類
泛型是編譯器認(rèn)可的,泛型的原型就是Object
泛型在集合中的應(yīng)用
集合中的元素可以是任意類型的,但是我們可以使用泛型強(qiáng)制要求集合里面存什么元素。
所以呢泛型在集合中的應(yīng)用就是用來(lái)約束集合中的元素。
List集合
List接口繼承了Collection接口,因此包含了Collection接口中的所有方法
List集合中的元素允許重復(fù),并且都是有序的。各元素的順序就是添加元素的順序,類似于Java數(shù)組,用于可以通過(guò)索引來(lái)訪問(wèn)集合中的元素。所以也通常是把ArrayList叫做可變數(shù)組。
List集合包括List接口以及List接口的所有實(shí)現(xiàn)類最常用的是ArrayList。
?
?
?

List接口的實(shí)現(xiàn)類
ArrayList類實(shí)現(xiàn)了可變的數(shù)組,允許保存所有元素,包括null。有具體的下標(biāo),適合查,不適合增和刪
LinkedList類采用鏈表結(jié)構(gòu)保存對(duì)象,不適合查,更適合增和刪。
List接口還定義了兩個(gè)非常重要的方法,作為L(zhǎng)ist的實(shí)現(xiàn)類同樣也具有這些方法。需要實(shí)現(xiàn)
get(int index) :獲得指定索引位置的元素
set(int index,Object obj):將集合中指定索引位置的元素修改為指定的元素
get(),set()方法測(cè)試
測(cè)試
重載后的add()remove()方法測(cè)試
List集合重載了一對(duì)Collection集合中的add,remove方法,支持使用下標(biāo)操作元素
subList(int index,int end)
subList(int index,int end)方法用于獲取子集,前切一刀,后切一刀,取中間
集合與數(shù)組的相互轉(zhuǎn)換
Collection提供了一個(gè)toArray方法,可以將當(dāng)前集合轉(zhuǎn)換為一個(gè)數(shù)組
數(shù)組轉(zhuǎn)為集合使用數(shù)組的工具類asList(),只能轉(zhuǎn)為L(zhǎng)ist集合
?
總結(jié):
get()獲取指定下標(biāo)對(duì)應(yīng)的元素
set()將指定的元素設(shè)置到指定位置上,返回值為原位置對(duì)應(yīng)的元素,所以set()也是替換元素操作
重載后的add(int index,E e)向指定位置插入指定元素,index:指集合中指定元素的位置
重載后的remove()刪除指定位置處的元素
subList(int index,int end)用于獲取子集,前切一刀,后切一刀。取中間,對(duì)子集的操作其實(shí)就是對(duì)元集合的操作
toArray()把當(dāng)前集合轉(zhuǎn)為一個(gè)數(shù)組
asList()把數(shù)組轉(zhuǎn)為一個(gè)集合
Set
代碼
List集合和Set集合的區(qū)別
Set集合中的元素是無(wú)序的
list中的元素是有序的
Set集合中的元素不允許重復(fù)
list中的元素允許重復(fù)
線程安全問(wèn)題以后說(shuō)
Map集合

Map集合沒(méi)有繼承Collection接口,包括Map接口以及Map接口的所有實(shí)現(xiàn)類。HashMap和TreeMap,,是key-value以鍵值對(duì)的形式存儲(chǔ)。Map中不能包含相同的key,每個(gè)key只能映射一個(gè)value

Map集合中常用方法
Put(k k V v) ? 將給定的一組鍵值存儲(chǔ)在Map集合中
get(Object k) ?根據(jù)給定的Key獲取對(duì)應(yīng)的Value
remove( K,k)根據(jù)給定的Key 刪除集合中Key對(duì)應(yīng)的Value
遍歷Map集合
遍歷所有的Key ? ?keySet()
遍歷所有的value(相對(duì)不常用) values()
遍歷每一組鍵值對(duì) ? entrySet()
Map接口的兩個(gè)子實(shí)現(xiàn)
HashMap:可以存null值,線程不安全,異步。
HashTable:不可以存null,線程安全,同步。
Map集合的應(yīng)用場(chǎng)景廣泛
原因:能確定key的值,就一定能精確快速的獲取key對(duì)應(yīng)的value。
很多的框架中的數(shù)據(jù)都是用Map存儲(chǔ)的
Spring,Spring mvc, Struts2, tomcat, redis,mongodb,這些框架在內(nèi)存中的數(shù)據(jù)存儲(chǔ)都是用Map
總結(jié):
Map集合:用鍵值對(duì)數(shù)據(jù)組成的集合
Put(k k V v) 往集合中添加元素
get(Object k)根據(jù)給定的Key值獲取value
remove( K,k)根據(jù)給定的Key刪除對(duì)應(yīng)的鍵值對(duì)
遍歷所有的Key ?
keySet() Map集合中的Key是一個(gè)Set集合,不允許重復(fù)
遍歷所有的value(相對(duì)不常用) values()
遍歷每一組鍵值對(duì) ? entrySet()
?