Java类HashMap常用API详解

本文深入探讨了Java中HashMap类的常用API,包括插入、删除、查找等操作,并提供了测试类和实体类的示例,帮助开发者更好地理解和运用HashMap。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HashMap - 测试类

package HashMap_UtilityClass;

import HashMap_UtilityClass.domain.Person;

import java.util.*;

/**
 * HashMap测试类
 */
public class HashMapTest {

    public static void main(String[] args) throws CloneNotSupportedException {

        // 向一个映射中添加键值
        HashMap<String, String> eleMap = new HashMap<String, String>();
        eleMap.put("李荣浩", "安徽蚌埠");
        eleMap.put("杨丞琳", "台湾台北");
        eleMap.put("邢晗铭", "浙江温州");
        System.out.println("向一个映射中添加键值:");
        MapElementTraversal(eleMap);

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

        // 将A映射的所有键值放入B映射中,B映射中原有的键值仍然保留
        HashMap<String, String> newMap = new HashMap<String, String>();
        newMap.put("保留键1", "保留值1");
        newMap.put("保留键2", "保留值2");
        System.out.println("原映射中的键值:");
        MapElementTraversal(newMap);
        System.out.println("\n将A映射中的键值放入B映射中:");
        newMap.putAll(eleMap);
        MapElementTraversal(newMap);

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

        // 返回某映射中的所有键值关系数
        System.out.println("清除eleMap映射中所有映射关系前的映射数:" + eleMap.size());
        // 判断一个映射中是否存在映射关系,不存在则返回true
        IsEmptyOrNot(eleMap);

        // 清除某映射中的所有映射关系
        eleMap.clear();
        System.out.println("\n清除eleMap映射中所有映射关系后的映射数:" + eleMap.size());
        // 判断一个映射中是否存在映射关系,不存在则返回true
        IsEmptyOrNot(eleMap);

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

        // 返回指定键所映射的值
        System.out.println("返回指定键所映射的值:");
        System.out.println("键(李荣浩)映射的值(" + newMap.get("李荣浩") + ")");
        System.out.println("键(杨丞琳)映射的值(" + newMap.get("杨丞琳") + ")");

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

        // 判断当前映射中是否包含某个键
        System.out.println("当前映射中是否存在键(邢晗铭):" + newMap.containsKey("邢晗铭"));
        System.out.println("当前映射中是否存在键(田颖):" + newMap.containsKey("田颖"));
        // 判断当前映射中是否包含某个值
        System.out.println("\n当前映射中是否存在值(浙江温州):" + newMap.containsValue("浙江温州"));
        System.out.println("当前映射中是否存在值(天津河东):" + newMap.containsValue("天津河东"));

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

        // 从映射中移除指定且存在的某个键的映射关系
        System.out.println("获取并移除存在的键(保留键1)的映射关系:" + newMap.remove("保留键1"));
        System.out.println("获取并移除不存在的键(保留键3)的映射关系:" + newMap.remove("保留键3"));

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

        // 返回此映射中所包含的键的Set视图
        Set<String> mapKeys = newMap.keySet();
        System.out.println("使用Set集合接收当前映射中所有的键:");
        for (String items : mapKeys) {
            System.out.println(items);
        }

        // 返回此映射所包含的值的Collection视图
        Collection<String> mapValues = newMap.values();
        System.out.println("\n使用Collection集合接收当前映射中所有的值:");
        for (String items : mapValues) {
            System.out.println(items);
        }

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

        // 返回此映射中的所有映射关系的Set视图
        Set<Map.Entry<String, String>> entrySet = newMap.entrySet();
        System.out.println("返回此映射中的所有映射关系的Set视图:");
        for (Map.Entry<String, String> items : entrySet) {
            System.out.println(items);
        }

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

        // 回此映射实例的浅表副本,不复制键和值本身(浅克隆)
        HashMap<String, String> cpuType = new HashMap<String, String>();
        cpuType.put("Corei3", "i3-8350K");
        cpuType.put("Corei5", "i5-9600K");
        cpuType.put("Corei7", "i7-9800X");
        cpuType.put("Corei9", "i9-10940X");
        System.out.println("原映射中的映射关系:");
        MapElementTraversal(cpuType);

        HashMap<String, String> cloneType = new HashMap<String, String>();
        System.out.println("\n新映射中的映射关系(浅克隆):");
        cloneType = (HashMap<String, String>) cpuType.clone();
        MapElementTraversal(cloneType);
        String corei9 = cpuType.get("Corei9");
        String cloneCorei9 = cloneType.get("Corei9");
        System.out.println("浅克隆:两个映射单实体指向相同的内存地址,corei9 == cloneCorei9的结果为:" + (corei9 == cloneCorei9));

        // 回此映射实例的深表副本,复制键和值本身(深克隆)
        Person p1 = new Person("李荣浩", '男', 35);
        Person p2 = new Person("邢晗铭", '女', 19);
        HashMap<String, Object> perMap = new HashMap<String, Object>();
        perMap.put("歌手1", p1);
        perMap.put("歌手2", p2);
        System.out.println("\n为映射元素深克隆准备单实体:");
        DeepCloneTraversal(perMap);

        Person person = MapElementDeepCloneDemo(p2);
        perMap.put("歌手3", person);
        System.out.println("\n映射元素单实体深克隆原理展示:");
        DeepCloneTraversal(perMap);
        System.out.println("深克隆:两个映射单实体指向不同的内存地址,p2 == person的结果为:" + (p2 == person));

        System.out.println();

    }

    /**
     * 映射元素深克隆原理演示
     *
     * @param person
     */
    private static Person MapElementDeepCloneDemo(Person person) {
        Person p = new Person(person.getName(), person.getGender(), person.getAge());
        p.setName("杨丞琳");
        p.setGender('女');
        p.setAge(36);
        return p;
    }

    /**
     * 深克隆元素遍历
     *
     * @param perMap
     */
    private static void DeepCloneTraversal(HashMap<String, Object> perMap) {
        String key = null;
        Object value = null;
        Iterator itor = perMap.entrySet().iterator();
        while (itor.hasNext()) {
            Map.Entry entry = (Map.Entry) itor.next();
            key = (String) entry.getKey();
            value = (Object) entry.getValue();
            System.out.println("键(" + key + ") - 值(" + value + ")");
        }
    }

    /**
     * 判断映射中是否存在映射关系
     *
     * @param map
     */
    private static void IsEmptyOrNot(HashMap<String, String> map) {
        // 判断一个映射中是否存在映射关系
        boolean flag = map.isEmpty();
        if (flag) {
            System.out.println("提示:当前映射为 [空] 映射!");
        } else {
            System.out.println("提示:当前映射为 [非空] 映射!");
        }
    }

    /**
     * 映射元素遍历
     *
     * @param map
     */
    private static void MapElementTraversal(HashMap<String, String> map) {
        String key = null, value = null;
        Iterator itor = map.entrySet().iterator();
        while (itor.hasNext()) {
            Map.Entry entry = (Map.Entry) itor.next();
            key = (String) entry.getKey();
            value = (String) entry.getValue();
            System.out.println("键(" + key + ") - 值(" + value + ")");
        }
    }

}

HashMap - 测试所需实体类

package HashMap_UtilityClass.domain;

/**
 * 深克隆原理演示所需的实体类
 */
public class Person implements Cloneable {

    private String name;
    private char gender;
    private int age;

    public Person() {
    }

    public Person(String name, char gender, int age) {
        this.name = name;
        this.gender = gender;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public char getGender() {
        return gender;
    }

    public void setGender(char gender) {
        this.gender = gender;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", gender=" + gender +
                ", age=" + age +
                '}';
    }

}

运行示范

向一个映射中添加键值:
键(李荣浩) - 值(安徽蚌埠)
键(杨丞琳) - 值(台湾台北)
键(邢晗铭) - 值(浙江温州)
--------------------------------------------------
原映射中的键值:
键(保留键1) - 值(保留值1)
键(保留键2) - 值(保留值2)

将A映射中的键值放入B映射中:
键(李荣浩) - 值(安徽蚌埠)
键(杨丞琳) - 值(台湾台北)
键(邢晗铭) - 值(浙江温州)
键(保留键1) - 值(保留值1)
键(保留键2) - 值(保留值2)
--------------------------------------------------
清除eleMap映射中所有映射关系前的映射数:3
提示:当前映射为 [非空] 映射!

清除eleMap映射中所有映射关系后的映射数:0
提示:当前映射为 [空] 映射!
--------------------------------------------------
返回指定键所映射的值:
键(李荣浩)映射的值(安徽蚌埠)
键(杨丞琳)映射的值(台湾台北)
--------------------------------------------------
当前映射中是否存在键(邢晗铭):true
当前映射中是否存在键(田颖):false

当前映射中是否存在值(浙江温州):true
当前映射中是否存在值(天津河东):false
--------------------------------------------------
获取并移除存在的键(保留键1)的映射关系:保留值1
获取并移除不存在的键(保留键3)的映射关系:null
--------------------------------------------------
使用Set集合接收当前映射中所有的键:
李荣浩
杨丞琳
邢晗铭
保留键2

使用Collection集合接收当前映射中所有的值:
安徽蚌埠
台湾台北
浙江温州
保留值2
--------------------------------------------------
返回此映射中的所有映射关系的Set视图:
李荣浩=安徽蚌埠
杨丞琳=台湾台北
邢晗铭=浙江温州
保留键2=保留值2
--------------------------------------------------
原映射中的映射关系:
键(Corei9) - 值(i9-10940X)
键(Corei7) - 值(i7-9800X)
键(Corei5) - 值(i5-9600K)
键(Corei3) - 值(i3-8350K)

新映射中的映射关系(浅克隆):
键(Corei9) - 值(i9-10940X)
键(Corei7) - 值(i7-9800X)
键(Corei5) - 值(i5-9600K)
键(Corei3) - 值(i3-8350K)
浅克隆:两个映射单实体指向相同的内存地址,corei9 == cloneCorei9的结果为:true

为映射元素深克隆准备单实体:
键(歌手1) - 值(Person{name='李荣浩', gender=男, age=35})
键(歌手2) - 值(Person{name='邢晗铭', gender=女, age=19})

映射元素单实体深克隆原理展示:
键(歌手3) - 值(Person{name='杨丞琳', gender=女, age=36})
键(歌手1) - 值(Person{name='李荣浩', gender=男, age=35})
键(歌手2) - 值(Person{name='邢晗铭', gender=女, age=19})
深克隆:两个映射单实体指向不同的内存地址,p2 == person的结果为:false
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值