2020-07-24

集合(一)

為了解決數(shù)組的定長(zhǎng)問題, JDK在1.2版本開發(fā)了集合框架,

集合和數(shù)組的相同點(diǎn)和不同點(diǎn)

集合是容器,存儲(chǔ)數(shù)據(jù)的,集合的長(zhǎng)度是可變的,集合容器只存儲(chǔ)引用數(shù)據(jù)類型

數(shù)組是容器,存儲(chǔ)數(shù)據(jù)的,數(shù)組的長(zhǎng)度是固定的,數(shù)組存儲(chǔ)基本類型和引用類型

數(shù)據(jù)多了存數(shù)組, 對(duì)象多了存集合

集合框架學(xué)習(xí)要素 :

1.向集合容器中存儲(chǔ)元素

2.取出集合容器中的元素

3.每種集合容器的自身特性

Collection集合接口

Collection 層次結(jié)構(gòu)中的根接口,所有的子接口和實(shí)現(xiàn)類都會(huì)具有他的功能

Collection接口的方法 :

添加:add (存儲(chǔ)元素)

移除:boolean remove(元素) 移除集合中指定的元素

??????? removeAll(Collection c) ) 移除兩個(gè)集合中相同元素

包含:boolean contains(元素) 判斷元素是否包含在集合中

集合長(zhǎng)度:集合.size()方法 :

??????????????? 數(shù)組.length 屬性 , 字符串.length() 方法,

清空:void clear() 只清空元素, 集合容器本身依然可以使用

判斷:boolean isEmpty() 判斷集合中是否有元素,無元素true

轉(zhuǎn)換為數(shù)組:Object[] toArray() 集合中的元素轉(zhuǎn)成數(shù)組*

取交集:retainAll(Collection c) 兩個(gè)集合取交集

Collections工具類

java.util.Collections 集合操作的工具類,提供方法來操作集合,方法全部是靜態(tài)方法,不能實(shí)例化

方法 :

static void shuffle(List list) 集合元素隨機(jī)排列

static void sort(List list) 集合中元素的自然順序排序

static void sort(List list,Comparator c) 按照比較器的順序進(jìn)行排序

static 傳遞什么返回什么 synchronized開頭(傳遞集合) 線程不安全集合,變成安全的集合

Comparator 是比較器接口, 需要自定義實(shí)現(xiàn)類,然后重寫方法

集合遍歷的兩個(gè)方法

1.迭代器 Iterator:迭代器是所有的Collection集合的通用遍歷方式.

?獲取迭代器接口Iterator的實(shí)現(xiàn)類對(duì)象 : ? Iterator<String> it = coll.iterator();

遍歷:? while ( it.hasNext() ) { String str = it.next();}

每個(gè)集合容器的內(nèi)部特性不一樣,迭代器是如何做到通用遍歷?

迭代器接口全是內(nèi)部類!迭代器接口實(shí)現(xiàn)類,都是集合的內(nèi)部類實(shí)現(xiàn), 可以完成遍歷的通用性

2.增強(qiáng)for循環(huán)

for(數(shù)據(jù)類型 變量名 : 集合或者數(shù)組) { 方法體 }

弊端 : 無索引,不能修改容器中的元素內(nèi)容

正式講解各個(gè)集合子類之前講一下常見的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu):

棧結(jié)構(gòu) :

內(nèi)存 : 進(jìn)口和出口是同一個(gè).

元素進(jìn)入到內(nèi)存后,必須到達(dá)內(nèi)存的底部.

數(shù)據(jù)先進(jìn)后出

隊(duì)列結(jié)構(gòu) :

內(nèi)存 : 既有入口,也有出口

過安檢, 在你前面的人,先過去

數(shù)據(jù)先進(jìn)去的先出來, 先進(jìn)先出

數(shù)組

數(shù)組也一種最基本的,使用頻率最高的數(shù)據(jù)結(jié)構(gòu).

數(shù)組的地址是連續(xù)的

弊端 : 定長(zhǎng). 需要添加或者是刪除元素,只能利用數(shù)組的復(fù)制方式來實(shí)現(xiàn)

數(shù)組在堆內(nèi)存存儲(chǔ), 堆內(nèi)存中數(shù)組的復(fù)制,非常消耗內(nèi)存資源

數(shù)組特點(diǎn) : 內(nèi)存地址是連續(xù), 數(shù)組的查詢速度快,索引

數(shù)組的增和刪的速度慢

鏈表

鏈表的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu) : 元素和元素之間保存地址的方式存儲(chǔ)

鏈表 : 采用一個(gè)元素,記錄下一個(gè)元素的內(nèi)存地址方式, 單向鏈表

鏈表 : 元素記錄下一個(gè)元素的內(nèi)存地址,同時(shí)也記錄前一個(gè)內(nèi)存地址, 雙向

鏈表特點(diǎn) : 內(nèi)存地址不是連續(xù), 找元素,一個(gè)一個(gè)去找, 查詢速度慢

增刪速度快

List接口

特點(diǎn)就不用多說了吧,三個(gè)

方法很多繼承自collection接口,在操作集合時(shí)可以根據(jù)index值操作

他也有子類,ArrayList和LinketList接口

ArrayList

底層是數(shù)組型結(jié)構(gòu)實(shí)現(xiàn),數(shù)組可復(fù)制,于是有點(diǎn)"可變"數(shù)組那個(gè)味了,線性不安全,有索引查詢速度快,但因?yàn)閺?fù)制數(shù)組增刪速度就慢了

LinketList是雙鏈表結(jié)構(gòu)型

由鏈表結(jié)構(gòu)特點(diǎn)可知,元素與元素之間儲(chǔ)存地址,內(nèi)存不是連續(xù)的,查詢慢,修改快

具有特有方法:(不用索引可以直接操作)

addfirst(元素).addlast(元素).增添

getfirst().getlast():取出值

removefirst()removelast():移除元素

push(元素)壓棧

元素? pop()彈棧

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容