(1)List接口:
?? 它是一個(gè)元素存取有序的集合烤宙。例如,存元素的順序是11俭嘁、22躺枕、33。那么集合中供填,元素的存儲(chǔ)就是按照11拐云、22、33的順序完成的)近她。
?? 它是一個(gè)帶有索引的集合叉瘩,通過索引就可以精確的操作集合中的元素(與數(shù)組的索引是一個(gè)道理)。
?? 集合中可以有重復(fù)的元素粘捎,通過元素的equals方法薇缅,來比較是否為重復(fù)的元素。
List接口的常用子類有:ArrayList集合?攒磨,? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? LinkedList集合
(2)增加元素方法
?? add(Object e):向集合末尾處泳桦,添加指定的元素
?? add(int index, Object e):向集合指定索引處,添加指定的元素娩缰,原有元素依次后移
(3)? 刪除元素刪除
?? remove(Object e):將指定元素對(duì)象灸撰,從集合中刪除,返回值為被刪除的元素
?? remove(int index):將指定索引處的元素拼坎,從集合中刪除浮毯,返回值為被刪除的元素
(4)替換元素方法
?? set(int index, Object e):將指定索引處的元素,替換成指定的元素泰鸡,返回值為替換前的元素
(5) 查詢?cè)胤椒?br>
?? get(int index):獲取指定索引處的元素债蓝,并返回該元素
(6) List集合存儲(chǔ)數(shù)據(jù)的結(jié)構(gòu)
List接口下有很多個(gè)集合,它們存儲(chǔ)元素所采用的結(jié)構(gòu)方式是不同的盛龄,這樣就導(dǎo)致了這些集合有它們各自的特點(diǎn)惦蚊,供給我們?cè)诓煌沫h(huán)境下進(jìn)行使用器虾。數(shù)據(jù)存儲(chǔ)的常用結(jié)構(gòu)有:堆棧、隊(duì)列蹦锋、數(shù)組兆沙、鏈表。我們分別來了解一下:
?? 堆棧莉掂,采用該結(jié)構(gòu)的集合葛圃,對(duì)元素的存取有如下的特點(diǎn):
?? 先進(jìn)后出(即,存進(jìn)去的元素憎妙,要在后它后面的元素依次取出后库正,才能取出該元素)。例如厘唾,子彈壓進(jìn)彈夾褥符,先壓進(jìn)去的子彈在下面,后壓進(jìn)去的子彈在上面抚垃,當(dāng)開槍時(shí)喷楣,先彈出上面的子彈,然后才能彈出下面的子彈鹤树。
?? 棧的入口铣焊、出口的都是棧的頂端位置
?? 壓棧:就是存元素。即罕伯,把元素存儲(chǔ)到棧的頂端位置曲伊,棧中已有元素依次向棧底方向移動(dòng)一個(gè)位置。
?? 彈棧:就是取元素追他。即坟募,把棧的頂端位置元素取出,棧中已有元素依次向棧頂方向移動(dòng)一個(gè)位置邑狸。
隊(duì)列懈糯,采用該結(jié)構(gòu)的集合,對(duì)元素的存取有如下的特點(diǎn):
? 先進(jìn)先出(即推溃,存進(jìn)去的元素,要在后它前面的元素依次取出后届腐,才能取出該元素)铁坎。例如,安檢犁苏。排成一列硬萍,每個(gè)人依次檢查,只有前面的人全部檢查完畢后围详,才能排到當(dāng)前的人進(jìn)行檢查朴乖。
?? 隊(duì)列的入口祖屏、出口各占一側(cè)。例如买羞,下圖中的左側(cè)為入口袁勺,右側(cè)為出口。
(7)數(shù)組畜普,采用該結(jié)構(gòu)的集合期丰,對(duì)元素的存取有如下的特點(diǎn):
?? 查找元素快:通過索引,可以快速訪問指定位置的元素
?? 增刪元素慢:
?? 指定索引位置增加元素:需要?jiǎng)?chuàng)建一個(gè)新數(shù)組吃挑,將指定新元素存儲(chǔ)在指定索引位置钝荡,再把原數(shù)組元素根據(jù)索引,復(fù)制到新數(shù)組對(duì)應(yīng)索引的位置舶衬。如下圖
?? 指定索引位置刪除元素:需要?jiǎng)?chuàng)建一個(gè)新數(shù)組埠通,把原數(shù)組元素根據(jù)索引,復(fù)制到新數(shù)組對(duì)應(yīng)索引的位置逛犹,原數(shù)組中指定索引位置元素不復(fù)制到新數(shù)組中端辱。
(8)鏈表,采用該結(jié)構(gòu)的集合圾浅,對(duì)元素的存取有如下的特點(diǎn):
?? 多個(gè)節(jié)點(diǎn)之間掠手,通過地址進(jìn)行連接。例如狸捕,多個(gè)人手拉手喷鸽,每個(gè)人使用自己的右手拉住下個(gè)人的左手,依次類推灸拍,這樣多個(gè)人就連在一起了做祝。
?? 查找元素慢:想查找某個(gè)元素,需要通過連接的節(jié)點(diǎn)鸡岗,依次向后查找指定元素
?? 增刪元素快:
?? 增加元素:只需要修改連接下個(gè)元素的地址即可混槐。
?? 刪除元素:只需要修改連接下個(gè)元素的地址即可。
(9)List與Set集合的區(qū)別
List:它是一個(gè)有序的集合(元素存與取的順序相同)轩性,它可以存儲(chǔ)重復(fù)的元素
set:它是一個(gè)無序的集合(元素存與取的順序可能不同)声登,它不能存儲(chǔ)重復(fù)的元素
?? List集合中的特有方法
?? void add(int index, Object element) 將指定的元素,添加到該集合中的指定位置上
?? Object get(int index)返回集合中指定位置的元素揣苏。
?? Object remove(int index) 移除列表中指定位置的元素, 返回的是被移除的元素
?? Object set(int index, Object element)用指定元素替換集合中指定位置的元素,返回值的更新前的元素
?? ArrayList:
底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組悯嗓,查詢快,增刪慢
?? LinkedList:
底層數(shù)據(jù)結(jié)構(gòu)是鏈表卸察,查詢慢脯厨,增刪快
?? HashSet:
元素唯一,不能重復(fù)
底層結(jié)構(gòu)是 哈希表結(jié)構(gòu)
元素的存與取的順序不能保證一致
如何保證元素的唯一的坑质?
重寫hashCode() 與 equals()方法
?? LinkedHashSet:
元素唯一不能重復(fù)
底層結(jié)構(gòu)是 哈希表結(jié)構(gòu) + 鏈表結(jié)構(gòu)
元素的存與取的順序一致