關(guān)于 Java Map工具類

java Map

Map 接口也是一個(gè)非常重要的集合接口, 用于存儲(chǔ)鍵/值對.
Map 中的元素都是成對出現(xiàn)的,鍵值對就想數(shù)組的索引與數(shù)組的內(nèi)容關(guān)系一樣, 將一個(gè)鍵映射到一個(gè)值的對象.
一個(gè)映射不能包含重復(fù)的鍵;每個(gè)鍵最多只能映射到一個(gè)值.
我們可以通過鍵去找到相應(yīng)的值.

key =>(映射) value

value 可以存儲(chǔ)任意類型的對象,我們可以根據(jù)key鍵快速查找value.
Map 中的鍵/值對以Entry類型的對象實(shí)例形式存在.

Map 方法:

方法 返回值 說明
clear() void 從此映射中一處所用映射關(guān)系(可選操作)
containsKey(Object key) boolean 如果此映射包含指定鍵的映射關(guān)系,則返回 true
containsValue(Object value) boolean 如果此映射將一個(gè)或多個(gè)映射到指定值,則返回true
entrySet() Set<Map.Entry<K,V>> 返回此映射中包含的映射關(guān)系的Set視圖
equals(Object o) boolean 比較指定的對象與此映射是否相等
get(Object key) V 返回指定鍵所映射的值;如果此映射不包含該鍵的映射關(guān)系,則返回null
hashCode() int 返回此映射的哈希碼值
isEmpty() boolean 如果此映射為包含鍵-值映射關(guān)系,則返回true
keySet() Set<K> 返回此映射中包含的鍵的Set視圖
put(K key,Vvalue) V 將指定的值與此映射中的指定鍵關(guān)聯(lián)(可選操作)
putAll(Map<? extends K, ? extends V>m) void 從指定映射中將所有映射關(guān)系復(fù)制到此映射中(可選操作)
remove(Object key) V 如果存在一個(gè)鍵的映射關(guān)系,則將其從此映射中移除(可選操作)
size int 返回此映射中的鍵-值映射關(guān)系數(shù)
values() Collection<V> 返回此映射中包含的值的Collection 視圖

HashMap 是基于哈希表的Map接口的一個(gè)重要實(shí)現(xiàn)類. HashMap 中的Entry對象是無需排列的,key值和value值都可以為null,但是一個(gè)HashMap 只能有一個(gè)key值為null的映射(key值不可重復(fù))

示例代碼:

// Course.java
public class Course {
    public String id;
    public String name;
    public Course(String id, String name){
        this.id = id;
        this.name = name;
    }
}
// MapTest.java
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.Set;

public class MapTest {

    /**
     * 用來承裝課程類型對象
     */
    public Map<String, Course> courses;

    /**
     * 在構(gòu)造器中初始化 courses 屬性
     * @param args
     */
    public MapTest() {
        this.courses = new HashMap<String, Course>();
    }

    /**
     * 測試添加:輸入課程 ID,判斷是否被占用
     * 若未被占用,輸入課程名稱,創(chuàng)建新課程對象
     * 并且添加到 courses 中
     * @param args
     */
    public void testPut() {
        //創(chuàng)建一個(gè) Scanner 對象,用來獲取輸入的課程 ID 和名稱
        Scanner console = new Scanner(System.in);

        for(int i = 0; i < 3; i++) {
            System.out.println("請輸入課程 ID:");
            String ID = console.next();
            //判斷該 ID 是否被占用
            Course cr = courses.get(ID);
            if(cr == null){
                //提示輸入課程名稱
                System.out.println("請輸入課程名稱:");
                String name = console.next();
                //創(chuàng)建新的課程對象
                Course newCourse = new Course(ID,name);
                //通過調(diào)用 courses 的 put 方法,添加 ID-課程映射
                courses.put(ID, newCourse);
                System.out.println("成功添加課程:" + courses.get(ID).name);
            }
            else {
                System.out.println("該課程 ID 已被占用");
                continue;
            }
        }
    }

    /**
     * 測試 Map 的 keySet 方法
     * @param args
     */

    public void testKeySet() {
        //通過 keySet 方法,返回 Map 中的所有鍵的 Set 集合
        Set<String> keySet = courses.keySet();
        //遍歷 keySet,取得每一個(gè)鍵,在調(diào)用 get 方法取得每個(gè)鍵對應(yīng)的 value
        for(String crID: keySet) {
            Course cr = courses.get(crID);
            if(cr != null){
                System.out.println("課程:" + cr.name);
            }
        }
    }

    /**
     * 測試刪除 Map 中的映射
     * @param args
     */
    public void testRemove() {
        //獲取從鍵盤輸入的待刪除課程 ID 字符串
        Scanner console = new Scanner(System.in);
        while(true){
            //提示輸出待刪除的課程 ID
            System.out.println("請輸入要?jiǎng)h除的課程 ID!");
            String ID = console.next();
            //判斷該 ID 是否對應(yīng)的課程對象
            Course cr = courses.get(ID);
            if(cr == null) {
                //提示輸入的 ID 并不存在
                System.out.println("該 ID 不存在!");
                continue;
            }
            courses.remove(ID);
            System.out.println("成功刪除課程" + cr.name);
            break;
        }
    }

    /**
     * 通過 entrySet 方法來遍歷 Map
     * @param args
     */
    public void testEntrySet() {
        //通過 entrySet 方法,返回 Map 中的所有鍵值對
        Set<Entry<String,Course>> entrySet = courses.entrySet();
        for(Entry<String,Course> entry: entrySet) {
            System.out.println("取得鍵:" + entry.getKey());
            System.out.println("對應(yīng)的值為:" + entry.getValue().name);
        }
    }

    /**
     * 利用 put 方法修改Map 中的已有映射
     * @param args
     */
    public void testModify(){
        //提示輸入要修改的課程 ID
        System.out.println("請輸入要修改的課程 ID:");
        //創(chuàng)建一個(gè) Scanner 對象,去獲取從鍵盤上輸入的課程 ID 字符串
        Scanner console = new Scanner(System.in);
        while(true) {
            //取得從鍵盤輸入的課程 ID
            String crID = console.next();
            //從 courses 中查找該課程 ID 對應(yīng)的對象
            Course course = courses.get(crID);
            if(course == null) {
                System.out.println("該 ID 不存在!請重新輸入!");
                continue;
            }
            //提示當(dāng)前對應(yīng)的課程對象的名稱
            System.out.println("當(dāng)前該課程 ID,所對應(yīng)的課程為:" + course.name);
            //提示輸入新的課程名稱,來修改已有的映射
            System.out.println("請輸入新的課程名稱:");
            String name = console.next();
            Course newCourse = new Course(crID,name);
            courses.put(crID, newCourse);
            System.out.println("修改成功!");
            break;
        }
    }

    public static void main(String[] args) {
        MapTest mt = new MapTest();
        mt.testPut();
        mt.testKeySet();
        mt.testRemove();
        mt.testModify();
        mt.testEntrySet();

    }
}

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

$ javac Course.java MapTest.java
$ java MapTest
請輸入課程 ID:
1
請輸入課程名稱:
語文
成功添加課程:語文
請輸入課程 ID:
1
該課程 ID 已被占用
請輸入課程 ID:
2
請輸入課程名稱:
數(shù)學(xué)
成功添加課程:數(shù)學(xué)
課程:語文
課程:數(shù)學(xué)
請輸入要?jiǎng)h除的課程 ID!
1
成功刪除課程語文
請輸入要修改的課程 ID:
2
當(dāng)前該課程 ID,所對應(yīng)的課程為:數(shù)學(xué)
請輸入新的課程名稱:
英語
修改成功!
取得鍵:2
對應(yīng)的值為:英語
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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