集合框架

集合框架概述

數(shù)組和集合的區(qū)別

長度

數(shù)組的長度固定不變的

集合長度是可以根據(jù)實(shí)際需要改變

內(nèi)容

數(shù)組存儲的是同一種類型的元素

集合可以存儲不同類型的元素

數(shù)據(jù)類型

數(shù)組可以存儲基本數(shù)據(jù)類型突诬,也可以存儲引用數(shù)據(jù)類型

集合只能存儲引用類型

注意:雖然集合不能存儲基本數(shù)據(jù)類型渣刷,但是可以存儲基本數(shù)據(jù)類型的包裝類類型

集合框架體系圖

collection

集合層次結(jié)構(gòu) 中的根接口席爽。Collection 表示一組對象绸栅,這些對象也稱為 collection 的元素瓣铣。一些 collection 允許有重復(fù)的元素喳张,而另一些則不允許尖奔。

一些 collection 是有序的茬底,而另一些則是無序的沪悲。JDK 不提供此接口的任何直接 實(shí)現(xiàn):它提供更具體的子接口(如 Set 和 List)實(shí)現(xiàn)。


集合的設(shè)計(jì)

*? ? ? ? ?因?yàn)榧嫌泻芏?增刪查改的方法阱表,而且集合是一套框架殿如,既然是框架那么每一種集合處理增加刪除修改遍歷的方式不一樣

* ?Collection的特點(diǎn)

* ? ? ? ? ?1.部分集合是有序的,部分集合是無序的最爬,這里的有序指的是存儲有序

* ? ? ? ? ?2.部分集合是可排序的涉馁,部分集合是不可排序

* ? ? ? ? ?3.部分集合是可重復(fù)的,部分集合是不可重復(fù)爱致,唯一的

* ?

* ?那么既然每一個集合的特點(diǎn)不一樣烤送,那么就取決于所有子類的實(shí)現(xiàn)方式不一樣,但是我們知道糠悯,既然是集合就應(yīng)該具備集合的特點(diǎn):

* ? ? ? ? ?1.長度可變的

*? ? ? ? ? ? ? ? ?2.能夠存儲任意的引用類型

*? ? ? ? ? ? ? ? ?3.具備很多對對象進(jìn)行增刪查改的方法

*? ? ? ? ? ? ? ? ?4.集合也能夠存儲基本類型的包裝類類型帮坚,更加擴(kuò)展了int的一些功能

* 但是實(shí)現(xiàn)方式不一樣

*? ? ? ? ? ? ? ? ?實(shí)現(xiàn)方式不一樣取決于底層的數(shù)據(jù)結(jié)構(gòu)不一樣

* 數(shù)據(jù)結(jié)構(gòu): 數(shù)據(jù)的存儲方式

* 算法: 遞歸 冒泡 選擇

* 學(xué)習(xí)集合就一定要學(xué)習(xí)集合相關(guān)的數(shù)據(jù)結(jié)構(gòu)

*? ? ? ? ?集合涉及的數(shù)據(jù)結(jié)構(gòu): 棧 , 隊(duì)列, 鏈表, 數(shù)組, 哈希表 , 二叉樹

*

* 1.添加功能

*? ? ? ? ?boolean add(Object obj)

*? ? ? ? ?boolean addAll(Collection c)

* 2.刪除功能

*? ? ? ? ?void clear()

* ?boolean remove(Object o)

* ?boolean removeAll(Collection<?> c)

* 3.修改功能

* 4.遍歷功能

* ?Object[] toArray()

*? ? ? ? ?Iterator<E> iterator()

* ?<T> T[] toArray(T[] a)

* 5.判斷功能

*? ? ? ? ?boolean contains(Object o)

* ?boolean containsAll(Collection<?> c)

* ?boolean isEmpty()

* 6.其他功能

* ?boolean retainAll(Collection<?> c)

* 7.獲取集合長度的功能

* ?int size()

*? ? ? ? ?

*/

public class CollectionDemo02 {

? ? ? ?public static void main(String[] args) {

? ? ? ? ? ? ? ?Collection c = new ArrayList();

? ? ? ? ? ? ? ?System.out.println(c);

? ? ? ? ? ? ? ?// boolean add(Object obj)

? ? ? ? ? ? ? ?c.add("張三");

? ? ? ? ? ? ? ?c.add("李四");

? ? ? ? ? ? ? ?c.add("王五");

? ? ? ? ? ? ? ?System.out.println(c);


? ? ? ? ? ? ? ?// boolean addAll(Collection c)

? ? ? ? ? ? ? ?Collection c1 = new ArrayList();

? ? ? ? ? ? ? ?c1.add("關(guān)羽");

? ? ? ? ? ? ? ?c1.add("趙云");

? ? ? ? ? ? ? ?c1.add("呂布");

? ? ? ? ? ? ? ?c.addAll(c1);

? ? ? ? ? ? ? ?System.out.println(c);

? ? ? ? ? ? ? ?System.out.println(c1);


? ? ? ? ? ? ? ?// void clear()

? ? ? ? ? ? ? ?System.out.println("--------------");

// ? ? ? ? ? ? ? ?c.clear();

? ? ? ? ? ? ? ?System.out.println(c);

? ? ? ? ? ? ? ?// boolean remove(Object o)

? ? ? ? ? ? ? ?System.out.println("remove:" + c.remove("張三"));

? ? ? ? ? ? ? ?System.out.println(c);


? ? ? ? ? ? ? ?// boolean removeAll(Collection<?> c)

// ? ? ? ? ? ? ? ?System.out.println("remove:" + c.removeAll(c1));

? ? ? ? ? ? ? ?System.out.println(c);


? ? ? ? ? ? ? ?System.out.println("------------------");

? ? ? ? ? ? ? ?System.out.println("boolean contains(Object o): " + c.contains(""));

? ? ? ? ? ? ? ?System.out.println("abc".contains(""));


? ? ? ? ? ? ? ?// boolean containsAll(Collection<?> c)

? ? ? ? ? ? ? ?System.out.println(c);


? ? ? ? ? ? ? ?Collection c2 = new ArrayList();

? ? ? ? ? ? ? ?c2.add("呂布");

? ? ? ? ? ? ? ?System.out.println("boolean containsAll(Collection<?> c) :" + c.containsAll(new ArrayList<>()));

? ? ? ? ? ? ? ?System.out.println("boolean containsAll(Collection<?> c) :" + c.containsAll(c2));

? ? ? ? ? ? ? ?// c: [李四, 王五, 關(guān)羽, 趙云, 呂布] ? new ArrayList<>(): []


// ? ? ? ? ? ? ? ?c.clear();

? ? ? ? ? ? ? ?// boolean isEmpty()

// ? ? ? ? ? ? ? ?System.out.println("boolean isEmpty() :" +c.isEmpty());


? ? ? ? ? ? ? ?// boolean retainAll(Collection<?> c)

? ? ? ? ? ? ? ?System.out.println(c); // c:[李四, 王五, 關(guān)羽, 趙云, 呂布] ?交集 [李四,曹操] = c:[李四]

? ? ? ? ? ? ? ?/*

? ? ? ? ? ? ? ? * c:[李四, 王五, 關(guān)羽, 趙云, 呂布] ?交集 [李四互艾,曹操] = c:[李四]

? ? ? ? ? ? ? ? * c:[李四, 王五, 關(guān)羽, 趙云, 呂布] ?交集 [李四123试和,曹操] = c:[]

? ? ? ? ? ? ? ? * c:[李四, 王五, 關(guān)羽, 趙云, 呂布] ?交集 [張三, 李四, 王五, 曹操, 關(guān)羽, 趙云, 呂布] = c:[李四, 王五, 關(guān)羽, 趙云, 呂布]

? ? ? ? ? ? ? ? */

? ? ? ? ? ? ? ?Collection c3 = new ArrayList<>();

? ? ? ? ? ? ? ?c3.add("張三");

? ? ? ? ? ? ? ?c3.add("李四");

? ? ? ? ? ? ? ?c3.add("王五");

? ? ? ? ? ? ? ?c3.add("曹操");

? ? ? ? ? ? ? ?c3.add("關(guān)羽");

? ? ? ? ? ? ? ?c3.add("趙云");

? ? ? ? ? ? ? ?c3.add("呂布");

? ? ? ? ? ? ? ?System.out.println(c3);

// ? ? ? ? ? ? ? ?System.out.println("boolean retainAll(Collection<?> c) " + c.retainAll(c3));

// ? ? ? ? ? ? ? ?System.out.println(c);

? ? ? ? ? ? ? ?System.out.println("boolean retainAll(Collection<?> c) " + c.retainAll(c3));

? ? ? ? ? ? ? ?System.out.println(c);

? ? ? ? ? ? ? ?// 求交集,返回的結(jié)果是觀察原集合是否發(fā)生改變 改變了返回true纫普,沒改變返回false


? ? ? ? ? ? ? ?System.out.println(c.size());


? ? ? ?}

}

/*

* 4.遍歷功能

* ?Object[] toArray()

*? ? ? ? ?Iterator<E> iterator()

*? ? ? ? ? ? ? ? ?boolean hasNext(); 判斷是否有下一個元素

*? ? ? ? ? ? ? ? ?E next(); 獲取下一個元素阅悍,并且指針指向下一個元素的位置

*

* java.util.NoSuchElementException

* 異常名稱: 沒有下一個元素異常

* 產(chǎn)生原因: 迭代器遍歷的時(shí)候沒有下一個元素了

* 解決辦法:在迭代器迭代之前做判斷

* ?<T> T[] toArray(T[] a)

*/

public class CollectionDemo03 {

? ? ? ?public static void main(String[] args) {

? ? ? ? ? ? ? ?Collection c = new ArrayList();

? ? ? ? ? ? ? ?c.add("李逵");

? ? ? ? ? ? ? ?c.add("武松");

? ? ? ? ? ? ? ?c.add("武大郎");

? ? ? ? ? ? ? ?System.out.println(c);


? ? ? ? ? ? ? ?Object[] arrs = c.toArray();

? ? ? ? ? ? ? ?for (int i = 0; i < arrs.length; i++) {

? ? ? ? ? ? ? ? ? ? ? ?System.out.println(arrs[i]);

? ? ? ? ? ? ? ?}


? ? ? ? ? ? ? ?System.out.println(arrs[1]);


? ? ? ? ? ? ? ?System.out.println("-------------------------");


? ? ? ? ? ? ? ?// 獲取和集合有關(guān)的迭代器對象

// ? ? ? ? ? ? ? ?Iterator it = c.iterator();

// ? ? ? ? ? ? ? ?if (it.hasNext()) {

// ? ? ? ? ? ? ? ? ? ? ? ?Object oj = it.next();

// ? ? ? ? ? ? ? ? ? ? ? ?System.out.println(oj);

// ? ? ? ? ? ? ? ?}

// ? ? ? ? ? ? ? ?if (it.hasNext()) {

// ? ? ? ? ? ? ? ? ? ? ? ?Object oj = it.next();

// ? ? ? ? ? ? ? ? ? ? ? ?System.out.println(oj);

// ? ? ? ? ? ? ? ?}

// ? ? ? ? ? ? ? ?if (it.hasNext()) {

// ? ? ? ? ? ? ? ? ? ? ? ?Object oj = it.next();

// ? ? ? ? ? ? ? ? ? ? ? ?System.out.println(oj);

// ? ? ? ? ? ? ? ?}

// ? ? ? ? ? ? ? ?if (it.hasNext()) {

// ? ? ? ? ? ? ? ? ? ? ? ?Object oj = it.next();

// ? ? ? ? ? ? ? ? ? ? ? ?System.out.println(oj);

// ? ? ? ? ? ? ? ?}

// ? ? ? ? ? ? ? ?

// ? ? ? ? ? ? ? ?Iterator it = c.iterator();

// ? ? ? ? ? ? ? ?while(it.hasNext()) {

// ? ? ? ? ? ? ? ? ? ? ? ?Object oj = it.next();

// ? ? ? ? ? ? ? ? ? ? ? ?System.out.println(oj);

// ? ? ? ? ? ? ? ?}

iterator接口


對 collection 進(jìn)行迭代的迭代器。迭代器取代了 Java Collections Framework 中的 Enumeration,迭代器依賴于集合而存在节视。

boolean hasNext()

? ? ? ?如果仍有元素可以迭代拳锚,則返回 true。

E next()

? ? ? ?返回迭代的下一個元素寻行。

注意:

? ? ? ?拋出: NoSuchElementException - 沒有元素可以迭代霍掺。

void remove()

? ? ? ?返回迭代的當(dāng)前元素。

迭代器原理


? ? ? ? ? ? ? ?for(Iterator it = c.iterator();it.hasNext();) {

? ? ? ? ? ? ? ? ? ? ? ?Object oj = it.next();

? ? ? ? ? ? ? ? ? ? ? ?System.out.println(oj);

? ? ? ? ? ? ? ?}


? ? ? ? ? ? ? ?System.out.println("-------------------");

? ? ? ? ? ? ? ?// foreach遍歷

? ? ? ? ? ? ? ?/*

? ? ? ? ? ? ? ? * foreach就是用來遍歷集合或者數(shù)組的

? ? ? ? ? ? ? ? * 格式:

? ? ? ? ? ? ? ? *? ? ? ? ?for(元素類型 元素 : 集合或者數(shù)組){

? ? ? ? ? ? ? ? *? ? ? ? ? ? ? ? ?對元素進(jìn)行響應(yīng)的操作

? ? ? ? ? ? ? ? * ?}

? ? ? ? ? ? ? ? */

? ? ? ? ? ? ? ?for (Object obj : arrs) {

? ? ? ? ? ? ? ? ? ? ? ?System.out.println(obj);

? ? ? ? ? ? ? ?}


? ? ? ? ? ? ? ?int[] arr = new int[5];

? ? ? ? ? ? ? ?arr[0] = 25;

? ? ? ? ? ? ? ?arr[1] = 235;

? ? ? ? ? ? ? ?for (int i : arr) {

? ? ? ? ? ? ? ? ? ? ? ?System.out.println(i);

? ? ? ? ? ? ? ?}



? ? ? ?}

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末寡痰,一起剝皮案震驚了整個濱河市抗楔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拦坠,老刑警劉巖连躏,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異贞滨,居然都是意外死亡入热,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門晓铆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來勺良,“玉大人,你說我怎么就攤上這事骄噪∩欣В” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵链蕊,是天一觀的道長事甜。 經(jīng)常有香客問我,道長滔韵,這世上最難降的妖魔是什么逻谦? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮陪蜻,結(jié)果婚禮上邦马,老公的妹妹穿的比我還像新娘。我一直安慰自己宴卖,他們只是感情好滋将,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著症昏,像睡著了一般耕渴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上齿兔,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼分苇。 笑死添诉,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的医寿。 我是一名探鬼主播栏赴,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼靖秩!你這毒婦竟也來了须眷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤沟突,失蹤者是張志新(化名)和其女友劉穎花颗,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體惠拭,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡扩劝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了职辅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片棒呛。...
    茶點(diǎn)故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖域携,靈堂內(nèi)的尸體忽然破棺而出簇秒,到底是詐尸還是另有隱情,我是刑警寧澤秀鞭,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布趋观,位于F島的核電站,受9級特大地震影響气筋,放射性物質(zhì)發(fā)生泄漏拆内。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一宠默、第九天 我趴在偏房一處隱蔽的房頂上張望麸恍。 院中可真熱鬧,春花似錦搀矫、人聲如沸抹沪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽融欧。三九已至,卻和暖如春卦羡,著一層夾襖步出監(jiān)牢的瞬間噪馏,已是汗流浹背麦到。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留欠肾,地道東北人瓶颠。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像刺桃,于是被迫代替她去往敵國和親粹淋。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)載自:Java集合框架實(shí)例 1- 介紹 集合是程序和語言的基本思想瑟慈。應(yīng)用程序通常都會應(yīng)用到集合桃移,例如雇員的信息,...
    01_小小魚_01閱讀 387評論 0 1
  • 01_集合框架(對象數(shù)組的概述和使用) A:案例演示需求:我有5個學(xué)生葛碧,請把這個5個學(xué)生的信息存儲到數(shù)組中借杰,并遍歷...
    KelvinYip閱讀 173評論 0 0
  • 四、集合框架 1:String類:字符串(重點(diǎn)) (1)多個字符組成的一個序列吹埠,叫字符串第步。生活中很多數(shù)據(jù)的描述都采...
    佘大將軍閱讀 734評論 0 2
  • 1. 集合介紹 集合是java中提供的一種容器,可以用來存儲多個數(shù)據(jù)缘琅。由java基礎(chǔ)語法中得知粘都,如果數(shù)據(jù)多了,可以...
    如果仲有聽日閱讀 503評論 0 0
  • Java集合框架結(jié)構(gòu)圖完整版 在完整版的結(jié)構(gòu)圖中Collection集合和Map下有許多未實(shí)現(xiàn)的抽象類(Ab...
    LizGbus8閱讀 865評論 0 3