20170705 Java集合框架

參考文獻(xiàn):《Java瘋狂講義》(第三版)

Java集合類是一種特別有用的工具類,可用于存儲(chǔ)數(shù)量不等的對(duì)象,并可以實(shí)現(xiàn)常用的數(shù)據(jù)結(jié)構(gòu)。除此之外,Java集合還可用于保存具有映射關(guān)系的關(guān)聯(lián)數(shù)組。

Java集合大致可分為:

1、Set:無(wú)序、不可重復(fù)的集合;

2、List:有序,重復(fù)的集合;

3、Queue:Java5增加,隊(duì)列集合實(shí)現(xiàn);

4、Map:具有映射關(guān)系的集合;

四種體系。

Java的集合類主要有兩個(gè)接口派生而出:Collection和Map。

Collection和Map是Java集合框架的根接口,這兩個(gè)接口又包含了子接口或?qū)崿F(xiàn)類。如圖

Collection接口是List、Set和Queue接口的父接口,該接口里定義的方法既可用于操作Set集合,也可用于操作List和Queue集合。

常用方法:

1、boolean add(object o):添加元素,成功返回true;

2、boolean addAll(Collection c):添加集合c里所有元素;

3、void clear():清楚集合里的所有元素,將集合長(zhǎng)度變?yōu)?;

4、boolean contains (Object o):返回集合里是否包含指定元素;

5、boolean containsAll(Collection):返回集合里是否包含集合c里的所有元素;

6、boolean isEmpty():返回集合是否為空;

7、boolean remove(Object o):刪除集合中的指定元素o,當(dāng)集合中包含了一個(gè)或者多個(gè)元素o時(shí),該方法值刪除第一個(gè)符合條件的元素,成功返回true;

8、boolean removeAll(Collection c):刪除集合c中里不包含的元素(交運(yùn)算),如果該操作改變了調(diào)用該方法的集合,則該方法返回true

9、int size():返回集合里元素的個(gè)數(shù);

10、Object[] toArray():該方法把集合轉(zhuǎn)換成一個(gè)數(shù)組,所有的集合元素變成對(duì)應(yīng)的數(shù)組元素。

使用Lambda表達(dá)式遍歷集合

Java8為Iterable接口新增了一個(gè)forEach(Consumer action)默認(rèn)方法,Iterable接口是Collection接口的父接口,所以Collection集合可以直接調(diào)用該方法。

import java.util.*;

public class CollectionEach{

public static void main(String[] args) throws Exception{

Collection books=new HashSet();

books.add("Hello");

books.add("World");

books.add("Learning Java is so happy");

books.forEach(obj->System.out.println(obj));

}

}

Iterator接口(迭代器)

Iterator接口也是Java集合框架的成員,但它與Collection系列,Map系列的集合不一樣。

Collection系列,Map系列的集合主要用于盛裝其他對(duì)象,而Iterator則主要用于遍歷(迭代訪問(wèn))。

Iterator接口定義了4個(gè)方法:

1、boolean hasNext():如果被迭代的集合還沒(méi)有被遍歷完,則返回true;

2、Object next():返回集合里的下一個(gè)元素;

3、void remove:刪除集合里上一次next方法返回的元素;

4、void forEachRemaining(Consumer action):這時(shí)Java8為Iterator新增的默認(rèn)方法,該方法可使用lambda表達(dá)式來(lái)遍歷集合;

知識(shí)點(diǎn):Iterator必須依附于Collection對(duì)象,若有一個(gè)Iterator對(duì)象,則必然有一個(gè)與之關(guān)聯(lián)的Collection對(duì)象。Iterator提供了兩個(gè)方法來(lái)迭代訪問(wèn)Collection集合里的元素,并可通過(guò)remove()方法來(lái)刪除集合中上一次next()方法返回集合元素。

知識(shí)點(diǎn):Iterator迭代器采用的是快速失敗機(jī)制,一旦在迭代過(guò)程中檢測(cè)到該集合已經(jīng)被修改(通常是被其他線程所修改),程序立即引發(fā)ConcurrentModificationException異常,而不是顯示修改后的結(jié)果,這樣可以避免共享資源而引發(fā)的潛在問(wèn)題。

Predicate操作集合

Java8為Collection集合新增了一個(gè)removeIf(Predicate filter)方法。

該方法將會(huì)批量刪除復(fù)合filter條件的所有元素。

Predicate也是函數(shù)式接口(Consumer類),因此可以使用Lambda表達(dá)式。

Stream操作集合

Java8還新增了Stream、IntStream、LongStream、DoubleStream等流式API,這些ApI代表多個(gè)支持串行和并行聚集操作的元素。

Java8還為上面每個(gè)流式API提供了對(duì)應(yīng)的Builder(建設(shè)者模式)

獨(dú)立使用Stream的步驟如下:

1、使用Stream或XxxStream的buiilder()類方法創(chuàng)建該Stream對(duì)應(yīng)的Builder。

2、重復(fù)調(diào)用Builder的add()方法向該流中添加多個(gè)元素。

3、調(diào)用Builder的build()方法獲取對(duì)應(yīng)的Stream

4、調(diào)用Stream的聚集方法

Stream提供了大量的方法來(lái)聚集操作,這些方法既可以是“中間的”,也可以是末端的。

中間方法:中間操作允許流保持打開(kāi)狀態(tài),并允許直接調(diào)用后續(xù)方法。

末端方法:末端方法是對(duì)流的最終操作。當(dāng)對(duì)某個(gè)Stream執(zhí)行末端方法后,該流將會(huì)被“消耗”且不可再用。


最后編輯于
?著作權(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ù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,545評(píng)論 19 139
  • 寫在前面自開(kāi)始在公司實(shí)習(xí)以來(lái),經(jīng)常都要用到集合框架。不僅后臺(tái)要用,在前臺(tái)做數(shù)據(jù)交互的時(shí)候用得也多。所以我想著是時(shí)候...
    EakonZhao閱讀 3,342評(píng)論 0 12
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚_t_閱讀 34,662評(píng)論 18 399
  • Collection ├List │├LinkedList │├ArrayList │└Vector │└Stac...
    AndyZX閱讀 959評(píng)論 0 1
  • 十月坐上車的那一刻,腦里一片空白,似乎想拼命抓住一些什么,卻模糊到連眼前的車道和樹(shù)影都看不清。耳邊回響的還...
    稻草人_Z閱讀 204評(píng)論 0 1

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