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

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

什么是類集框架

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

注意這些接口及其實(shí)現(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有一個實(shí)現(xiàn)類,就是HashSet,它是Set中我們最常用的。下面我們舉一個例子,在HashSet中使用這些方法。

Set 和 HashSet的使用方法

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

public class Test {
    public static void main(String args []) {
        //把具體的實(shí)現(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());       
    }
}

運(yùn)行結(jié)果:

如何遍歷 Set
集合是無序的,所以不能像數(shù)組或者List那樣,根據(jù)下標(biāo)輸出其中的元素,因此我們需要使用迭代器 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());      
    }
}

運(yùn)行結(jié)果:

Map 和 HashMap的使用方法

由一開始的類圖可以看出,Map并沒有繼承Collection接口,是一個單獨(dú)的接口。
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"));
    }
}

運(yùn)行結(jié)果:

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

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

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