Java 類集框架(Set, List, Map)的使用

雖然面試的要求是要知道HashMap是怎么實現(xiàn)的购桑,令人望而卻步,但搞明白它怎么用氏淑,就成功了一小半勃蜘。
本文基于Mars老師的Java4Android視頻。

什么是類集框架

  • 是一組類和接口
  • 位于java.util包中
  • 主要用于存儲和管理對象
  • 主要分為三大類--集合假残、列表和映射
    • 集合中的對象不按特定的方式排序缭贡,并且沒有重復(fù)對象。和數(shù)學(xué)中集合的概念類似。(如果添加了重復(fù)的對象阳惹,會怎樣呢坑资?并不會報錯,但重復(fù)的元素只算一個)穆端。
    • 列表中的對象按照索引位置排序袱贮,可以有重復(fù)對象。
    • 映射中的每一個元素包含一個鍵對象和一個值對象体啰,即鍵值對攒巍。鍵不可以重復(fù),值可以重復(fù)荒勇。

注意這些接口及其實現(xiàn)類的繼承關(guān)系:

Collection 和 Iterator接口

Set 接口和 List 接口都是 Collection 的子接口柒莉,因此我們先看看Collection 接口中有什么方法:

方法名 作用
boolean add(Object o) 向集合中加入一個對象
void clear() 刪除集合中的所有對象
boolean isEmpty() 判斷集合是否為空
remove(Object o) 從集合中刪除一個對象的引用
int size() 返回集合中元素的數(shù)目

Set有一個實現(xiàn)類,就是HashSet沽翔,它是Set中我們最常用的兢孝。下面我們舉一個例子,在HashSet中使用這些方法仅偎。

Set 和 HashSet的使用方法

//導(dǎo)包時少用*跨蟹,寫明確一點,方便查錯和閱讀
import java.util.Set;
import java.util.HashSet;

public class Test {
    public static void main(String args []) {
        //把具體的實現(xiàn)類向上轉(zhuǎn)型為接口類型橘沥,方便接收參數(shù),即:
        //HashSet<String> hashSet = new HashSet<String>();
        //Set<String> set = hashSet;
        Set<String> set = new HashSet<String>();
        set.add("a");
        set.add("b");
        set.add("c");
        set.add("d");
        System.out.println("Size: " + set.size());
        
        //重復(fù)添加元素窗轩,會怎樣呢? 
        set.add("c");
        System.out.println("Size with two c: " + set.size());
        
        set.remove("a");
        System.out.println("Size after remove: " + set.size());     
        
        set.clear();
        System.out.println("Size after clear: " + set.size());
        
        System.out.println("Is empty: " + set.isEmpty());       
    }
}

運行結(jié)果:

如何遍歷 Set
集合是無序的座咆,所以不能像數(shù)組或者List那樣痢艺,根據(jù)下標輸出其中的元素,因此我們需要使用迭代器 Iterator介陶。
由最前面的圖可以看出堤舒,它們之間的繼承關(guān)系是:Iterator <-- Collection <-- Set <-- HashSet.

Iterator 的常用方法有:

  • hasNext():判斷迭代器當(dāng)中,還有沒有下一個元素
  • next():返回迭代器當(dāng)中的下一個元素

遍歷Set的方法:
生成迭代器對象:Iterator it = set.iterator() 哺呜,這個迭代器對象可以把set中的元素都取出來舌缤。
iterator() 方法屬于 collection 接口,所以 collection 的子接口 set 中, 必然有 iterator() 方法弦牡。

import java.util.Iterator;
import java.util.Set;
import java.util.HashSet;

public class Test {
    public static void main(String args []) {
        Set<String> set = new HashSet<String>();        
        set.add("a");
        set.add("b");
        set.add("c");
        set.add("d");       
        Iterator<String> it = set.iterator();
        while(it.hasNext()) 
            System.out.println(it.next());      
    }
}

運行結(jié)果:

Map 和 HashMap的使用方法

由一開始的類圖可以看出友驮,Map并沒有繼承Collection接口,是一個單獨的接口驾锰。
Map中的重要方法:

  • put(K key, V value): 把鍵值對放入Map
  • get(Object key): 返回當(dāng)前鍵對應(yīng)的值
  • 其他方法與Collection中類似卸留,比如remove(), clear()

一個簡單的例子:

import java.util.Map;
import java.util.HashMap;

public class Test {
    public static void main(String args []) {
        Map<String, String> map = new HashMap<String, String>();
        map.put("1", "a");
        map.put("2", "b");
        map.put("3", "c");
        map.put("4", "d");
        //如果有重復(fù)的鍵,后面的值會覆蓋前面的
        map.put("3", "e");
        
        System.out.println(map.size());
        System.out.println(map.get("3"));
    }
}

運行結(jié)果:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末椭豫,一起剝皮案震驚了整個濱河市耻瑟,隨后出現(xiàn)的幾起案子旨指,更是在濱河造成了極大的恐慌,老刑警劉巖喳整,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谆构,死亡現(xiàn)場離奇詭異,居然都是意外死亡框都,警方通過查閱死者的電腦和手機搬素,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來魏保,“玉大人熬尺,你說我怎么就攤上這事∥铰蓿” “怎么了粱哼?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長檩咱。 經(jīng)常有香客問我揭措,道長,這世上最難降的妖魔是什么刻蚯? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任绊含,我火速辦了婚禮,結(jié)果婚禮上芦倒,老公的妹妹穿的比我還像新娘艺挪。我一直安慰自己不翩,他們只是感情好兵扬,可當(dāng)我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著口蝠,像睡著了一般器钟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上妙蔗,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天傲霸,我揣著相機與錄音,去河邊找鬼眉反。 笑死昙啄,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的寸五。 我是一名探鬼主播梳凛,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼梳杏!你這毒婦竟也來了韧拒?” 一聲冷哼從身側(cè)響起淹接,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎叛溢,沒想到半個月后塑悼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡楷掉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年厢蒜,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片烹植。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡郭怪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出刊橘,到底是詐尸還是另有隱情鄙才,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布促绵,位于F島的核電站攒庵,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏败晴。R本人自食惡果不足惜浓冒,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望尖坤。 院中可真熱鬧稳懒,春花似錦、人聲如沸慢味。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽纯路。三九已至或油,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間驰唬,已是汗流浹背顶岸。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留叫编,地道東北人辖佣。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像搓逾,于是被迫代替她去往敵國和親哀九。 傳聞我的和親對象是個殘疾皇子别垮,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,722評論 2 345

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