java 集合概述

一窥岩、集合概述

Java是一種面向對象語言,如果我們要針對多個對象進行操作宰缤,就必須對多個對象進行存儲颂翼。而數(shù)組長度固定,不能滿足變化的要求慨灭。所以朦乏,java提供了集合。

特點

1.????????長度可以發(fā)生改變

2.????????只能存儲對象

3.????????可以存儲多種類型對象

與數(shù)組區(qū)別

數(shù)組

集合

長度

固定

可變

存儲元素

基本類型/引用類型

引用類型

元素類型的一致性

必須一致

可以不一致

二氧骤、集合體系

集合作為一個容器呻疹,可以存儲多個元素,但是由于數(shù)據(jù)結構的不同筹陵,java提供了多種集合類刽锤。將集合類中共性的功能,不斷向上抽取朦佩,最終形成了集合體系結構并思。

數(shù)據(jù)結構:數(shù)據(jù)存儲的方式

Java中集合類的關系圖

集合體系導圖(用鼠標拖動圖片可看大圖或右擊圖片選擇在新標簽頁中打開圖片(I))

三、Collection

Collection是最基本的集合接口语稠,一個Collection代表一組Object宋彼,即Collection的元素(Elements)。一些Collection允許相同的元素而另一些不行仙畦。一些能排序而另一些不行输涕,于是衍生出兩個子類接口List和Set。

Collection基本功能

A:添加功能

boolean add(Object obj):向集合中添加一個元素

boolean addAll(Collection c):向集合中添加一個集合的元素议泵。

B:刪除功能

void clear():刪除集合中的所有元素占贫。

boolean remove(Object obj):從集合中刪除指定的元素

boolean removeAll(Collection c):從集合中刪除一個指定的集合元素桃熄。

C:判斷功能

boolean isEmpty():判斷集合是否為空先口。

boolean contains(Object obj):判斷集合中是否存在指定的元素型奥。

boolean containsAll(Collection c):判斷集合中是否存在指定的一個集合中的元素。

D:遍歷功能

Iterator iterator():就是用來獲取集合中每一個元素碉京。

E:長度功能

int size():獲取集合中的元素個數(shù)

F:交集功能

boolean retainAll(Collection c):判斷兩個集合中是否有相同的元素厢汹。???

G:把集合轉換成數(shù)組

Object[] toArray():把集合變成數(shù)組。

List接口

List接口下的集合元素存儲有序谐宙,可以重復烫葬。

List的特有功能

A:添加功能

void add(int index, Object obj):在指定位置添加元素

B:刪除功能

Object remove(int index):根據(jù)指定索引刪除元素,并把刪除的元素返回凡蜻。

C:修改功能

Object set(int index, Object obj):把指定索引位置的元素修改為指定的值搭综,返回修改前的值。

D:獲取功能

int indexOf(Object o):返回指定元素在集合中第一次出現(xiàn)的索引

Object get(int index):獲取指定位置的元素

ListIterator listIterator():列表迭代器

E:截取功能

List subList(int fromIndex, int toIndex):截取集合划栓。

Set 接口

Set接口下的元素無序兑巾,不可以重復。其下面分為HashSet和TreeSet忠荞。

HashSet

底層數(shù)據(jù)結構是哈希表蒋歌,線程不安全,效率高委煤。

保證唯一性依賴兩個方法:hashCode()和equals()堂油。

順序:

判斷hashCode()值是否相同。

相同:繼續(xù)走equals(),看返回值

如果true:就不添加到集合碧绞。

如果false:就添加到集合府框。

不同:就添加到集合。

TreeSet

底層數(shù)據(jù)結構是二叉樹头遭,線程不安全寓免,效率高。

保證元素唯一性的方法時根據(jù)返回值是否是0计维。

保證排序的兩種方式:

自然排序(元素具備比較性):實現(xiàn)Comparable接口

比較器排序(集合具備比較性):實現(xiàn)Comparator接口

四.迭代器的使用

使用步驟:

1袜香、通過集合對象獲取迭代器對象。

2鲫惶、通過迭代器對象判斷蜈首。

3、通過迭代器對象獲取欠母。

迭代器原理

由于多種集合的數(shù)據(jù)結構不同欢策,所以存儲方式不同,所以赏淌,取出方式也不同踩寇。

這個時候,我們就把判斷和獲取功能定義在了一個接口中六水,將來俺孙,遍歷哪種集合的時候辣卒,只要該集合內部實現(xiàn)這個接口即可。

迭代器源碼

[java]view plaincopy

publicinterfaceIterator

{

publicabstractbooleanhasNext();

publicabstractObject?next();

}

publicinterfaceCollection

{

publicabstractIterator?iterator();

}

publicinterfaceListextendsCollection

{

...

}

publicclassArrayListimplementsList

{

publicIterator?iterator()

{

returnnew?Itr();

}

privateclassItrimplementsIterator

{

publicboolean?hasNext(){...}

publicObject?next(){...}

}

}

Collection存儲字符串和自定義對象并通過迭代器遍歷

1睛榄、存儲字符串

[java]view plaincopy

Collection?c?=newArrayList();

c.add("hello");

c.add("world");

c.add("java");

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

while(it.hasNext())

{

String?s?=?(String)it.next();

System.out.println(s);

}

2荣茫、存儲自定義對象(Student類的代碼省略)

[java]view plaincopy

Collection?c=newArrayList();

Student?s1=newStudent("林青霞",26);

c.add("s1");

Iterator?it=c.iterator();

while(it.hasNext())

{

String?s=(String)it.next();

System.out.println(s);

}

ListIterator迭代器是Iterator的子接口

所以List的遍歷方式共有三種

1、Iterator迭代器

2场靴、ListIterator迭代器

3啡莉、普通for+get()

五.Map

map是一個鍵值對形式的集合。它的元素都是有鍵和值組成旨剥。Map的鍵(key)是唯一的,值(value)可以重復咧欣。

Map的功能:

A:添加功能

V put(K key ,V value) :當key在集合中不存在是,添加元素;當key存在時替換元素

B:判斷功能

boolean containsKey (Object key) :判斷指定的鍵是否在集合中存在

Boolean containsValue(Object value):判斷指定的值是否在集合中存在

Boolean isEmpty() :判斷集合是否為空

C:刪除功能

Void clear():清除所有鍵值對數(shù)據(jù)

D:獲取功能

Object get (Object key) :根據(jù)鍵獲取值

Set keyset(): 所有鍵的集合

Collectionvalues() :所有值的集合

E:長度功能

Int size()

Map包括HashMap、HashTable和TreeMap轨帜。其中该押,HashTable已基本被HashMap取代,這里不做討論阵谚。

(注:HashMap支持null , HashTable不支持null )

Map遍歷的兩種方式:(導圖上面已有蚕礼,這里直接上代碼了)

鍵找值:

[java]view plaincopy

publicstaticvoidmain(String[]?args)?{

Map?map?=newHashMap();

map.put("二陽",23);

map.put("二崢",24);

map.put("二光",25);

Set?keys=map.keySet();//把鍵其中起來,存入到set集合中.

for(String?key:keys){//遍歷鍵集合,獲取每一個鍵梢什。增強for

Integer?value=map.get(key);//讓鍵去找值?get(Object?key)

System.out.println(key+"***"+value);

}

}

鍵值對:

[java]view plaincopy

publicstaticvoidmain(String[]?args)?{

Map?map?=newHashMap();

map.put("二陽",23);

map.put("二崢",24);

map.put("二光",25);

Set>?set=map.entrySet();//獲取鍵值對集合奠蹬。Set<>?entrySet()

for(Map.Entry?me:set){//遍歷鍵值對集合,獲取到每一個鍵值對嗡午。增強for囤躁,迭代器

String?key=me.getKey();//通過鍵值對獲取鍵getKey()

Integer?value=me.getValue();//通過鍵值對獲取值getValue()

System.out.println(key+"***"+value);

}

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市荔睹,隨后出現(xiàn)的幾起案子狸演,更是在濱河造成了極大的恐慌,老刑警劉巖僻他,帶你破解...
    沈念sama閱讀 222,464評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宵距,死亡現(xiàn)場離奇詭異,居然都是意外死亡吨拗,警方通過查閱死者的電腦和手機满哪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來劝篷,“玉大人哨鸭,你說我怎么就攤上這事〗考耍” “怎么了像鸡?”我有些...
    開封第一講書人閱讀 169,078評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長哈恰。 經常有香客問我只估,道長华望,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,979評論 1 299
  • 正文 為了忘掉前任仅乓,我火速辦了婚禮,結果婚禮上蓬戚,老公的妹妹穿的比我還像新娘夸楣。我一直安慰自己,他們只是感情好子漩,可當我...
    茶點故事閱讀 69,001評論 6 398
  • 文/花漫 我一把揭開白布豫喧。 她就那樣靜靜地躺著,像睡著了一般幢泼。 火紅的嫁衣襯著肌膚如雪紧显。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,584評論 1 312
  • 那天缕棵,我揣著相機與錄音孵班,去河邊找鬼。 笑死招驴,一個胖子當著我的面吹牛篙程,可吹牛的內容都是我干的。 我是一名探鬼主播别厘,決...
    沈念sama閱讀 41,085評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼虱饿,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了触趴?” 一聲冷哼從身側響起氮发,我...
    開封第一講書人閱讀 40,023評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎冗懦,沒想到半個月后爽冕,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 46,555評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡披蕉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,626評論 3 342
  • 正文 我和宋清朗相戀三年扇售,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嚣艇。...
    茶點故事閱讀 40,769評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡承冰,死狀恐怖,靈堂內的尸體忽然破棺而出食零,到底是詐尸還是另有隱情困乒,我是刑警寧澤,帶...
    沈念sama閱讀 36,439評論 5 351
  • 正文 年R本政府宣布贰谣,位于F島的核電站娜搂,受9級特大地震影響迁霎,放射性物質發(fā)生泄漏。R本人自食惡果不足惜百宇,卻給世界環(huán)境...
    茶點故事閱讀 42,115評論 3 335
  • 文/蒙蒙 一考廉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧携御,春花似錦昌粤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至誓军,卻和暖如春袱讹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背昵时。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評論 1 274
  • 我被黑心中介騙來泰國打工捷雕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人壹甥。 一個月前我還...
    沈念sama閱讀 49,191評論 3 378
  • 正文 我出身青樓非区,卻偏偏與公主長得像,于是被迫代替她去往敵國和親盹廷。 傳聞我的和親對象是個殘疾皇子征绸,可洞房花燭夜當晚...
    茶點故事閱讀 45,781評論 2 361

推薦閱讀更多精彩內容

  • Collection ├List │├LinkedList │├ArrayList │└Vector │└Stac...
    AndyZX閱讀 880評論 0 1
  • 一、集合框架的概述 1俄占、概述: 1管怠、簡述:所謂集合,就是為方便對多個對象的操作缸榄,對對象進行存儲渤弛。集合就是存儲對象最...
    玉圣閱讀 515評論 0 4
  • 寫在前面自開始在公司實習以來,經常都要用到集合框架甚带。不僅后臺要用她肯,在前臺做數(shù)據(jù)交互的時候用得也多。所以我想著是時候...
    EakonZhao閱讀 3,273評論 0 12
  • 3.3 集合 一方面鹰贵, 面向對象語言對事物的體現(xiàn)都是以對象的形式晴氨,為了方便對多個對象的操作,就要對對象進行存儲碉输。另...
    閆子揚閱讀 735評論 0 1