使用自定义的类作为HashMap的key【代码演示】

简介: 使用自定义的类作为HashMap的key【代码演示】

代码实现

package com.Keafmd.April.test;
import java.util.HashMap;
/**
 * Keafmd
 *
 * @ClassName: TestHashMap
 * @Description:
 * @author: 牛哄哄的柯南
 * @Date: 2021-04-21 14:37
 * @Blog: https://keafmd.blog.csdn.net/
 */
public class TestHashMap {
    public static void main(String[] args) {
        /*HashMap<Integer,String> hashMap = new HashMap<>();
        hashMap.put(1,"hello");
        hashMap.put(2,"hello2");
        hashMap.forEach((key,value)->{
            System.out.println(key+" == "+value);
        });*/
        HashMap<Person, String> map = new HashMap<Person, String>();
        map.put(new Person("keafmd"), "6666");
        map.put(new Person("keafod"), "8888");
        map.put(new Person("keafod"), "9999"); // 这样就会覆盖掉8888
        System.out.println(map.toString());
        System.out.println("===============");
        System.out.println(map.get((new Person("keafmd"))));
        System.out.println(map.get((new Person("keafod"))));
        System.out.println("===============");
        System.out.println(new String("keafmd").hashCode());
        System.out.println("keafmd".hashCode());
        System.out.println(map.get("keafmd"));
        System.out.println("===============");
        map.forEach((key, value) -> {
            System.out.println(key.toString() + ".hashCode() = " + key.hashCode());
            System.out.println(key + ".value = " + value);
        });
    }
}
class Person {
    private String name;
    Person(String name) {
        this.name = name;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null || getClass() != obj.getClass()) return false;
        Person person = (Person) obj;
        if (name != null ? !name.equals(person.name) : person.name != null) return false;
        return true;
    }
    @Override
    public int hashCode() {
        int result = 17;
        return 31 * result + name.hashCode();
        // 这样写的话,字符串"keafmd" 和 new Person("keafmd") 的哈希值就是一样的,
//        return name != null ? name.hashCode() : 0;
    }
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                '}';
    }
}

运行效果

{Person{name='keafod'}=9999, Person{name='keafmd'}=6666}
===============
6666
9999
===============
-1135381290
-1135381290
null
===============
Person{name='keafod'}.hashCode() = -1135380701
Person{name='keafod'}.value = 9999
Person{name='keafmd'}.hashCode() = -1135380763
Person{name='keafmd'}.value = 6666
Process finished with exit code 0


总结

      我们想要将自定义的类作为HashMap的key我们必须重写equals()和hashCode()方法,这样才能给每个作为key的对象一个唯一的hashcode值,这样就可以成功的使用自定义的类作为HashMap的key。


以上就是使用自定义的类作为HashMap的key的全部内容。


相关文章
|
11月前
|
存储 程序员 C++
C++中map的使用方法
map是一种使用键值对的数据结构,它允许我们使用键来查找值。map中的键必须是唯一且有序的,而值可以重复并且没有特定的顺序。 map中的数据以树结构进行组织,其中每个节点都由一个键和一个值组成。根据键的大小,节点被插入到正确的位置以保持树的有序性。这使得在map中查找值非常高效,因为我们可以使用二分查找来快速定位值。
214 0
|
22天前
|
存储 前端开发 Java
Java【代码分享 13】前端动态添加一条记后端使用JDK1.8实现map对象根据key的部分值进行分组(将map对象封装成指定entity对象)
Java【代码分享 13】前端动态添加一条记后端使用JDK1.8实现map对象根据key的部分值进行分组(将map对象封装成指定entity对象)
27 0
|
7月前
|
Java
自定义list To HashMap工具类
自定义list To HashMap工具类
28 0
|
设计模式 Java
【伍】一篇让你搞懂Java中的字符串,两种实例化方式的差异以及String常用方法的使用(附示例)
【伍】一篇让你搞懂Java中的字符串,两种实例化方式的差异以及String常用方法的使用(附示例)
174 0
【伍】一篇让你搞懂Java中的字符串,两种实例化方式的差异以及String常用方法的使用(附示例)
|
JSON 分布式计算 Hadoop
Map 方式|学习笔记
快速学习 Map 方式。
74 0
|
Go 开发者
map 三种用法和应用实例|学习笔记
快速学习map三种用法和应用实例
182 0
map 三种用法和应用实例|学习笔记
|
JSON 分布式计算 Hadoop
map 方式 | 学习笔记
快速学习 map 方式
70 0
|
存储 Java
Java中Map集合概述特点、基本功能、获取功能及Map集合的两种遍历方式
Map集合概述特点、基本功能、获取功能及Map集合的两种遍历方式的简单示例
118 0
Java中Map集合概述特点、基本功能、获取功能及Map集合的两种遍历方式
|
安全 Java
构建一个创建Map的工具类来辅助理解可变传参
虽说java作为编译语言,但是它本身也提供了很多运行时能力,今天介绍一个非常基础的知识点,可变参数传递 在日常的开发过程中,创建Map对象还是比较常见的,现在我希望写一个工具类,可以非常简单创建并初始化Map对象 因此我们可以实现一个MapUtil工具类,来支持这个场景
218 0
|
Java 开发者
【第21个代码模型】Map 集合(Map 接口概述)|学习笔记
快速学习 【 第 21 个代码模型】Map 集合(Map 接口概述)

热门文章

最新文章