From 77b9796f4623f06470c568ee15fa00f2eb1a29d0 Mon Sep 17 00:00:00 2001 From: xuxin <840198532@qq.com> Date: Tue, 3 Feb 2026 10:51:45 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=9B=E9=98=B6day04-Map=E9=9B=86=E5=90=88?= =?UTF-8?q?=E5=AD=98=E5=82=A8=E8=87=AA=E5=AE=9A=E4=B9=89=E5=AF=B9=E8=B1=A1?= =?UTF-8?q?=EF=BC=88=E8=A6=81=E9=87=8D=E5=86=99hashCode&equals=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/inmind/map01/MapDemo04.java | 33 ++++++++++++++++ .../src/com/inmind/map01/Student.java | 38 +++++++++++++++++++ 2 files changed, 71 insertions(+) create mode 100644 javaSE-day04/src/com/inmind/map01/MapDemo04.java create mode 100644 javaSE-day04/src/com/inmind/map01/Student.java diff --git a/javaSE-day04/src/com/inmind/map01/MapDemo04.java b/javaSE-day04/src/com/inmind/map01/MapDemo04.java new file mode 100644 index 0000000..05c1cf3 --- /dev/null +++ b/javaSE-day04/src/com/inmind/map01/MapDemo04.java @@ -0,0 +1,33 @@ +package com.inmind.map01; + +import java.util.HashMap; +import java.util.HashSet; + +/* +练习:每位学生(姓名,年龄)都有自己的家庭住址。那么,既然有对应关系,则将学生对象和家庭住址存储到map集合中。 +学生作为键, 家庭住址作为值。 +注意:学生姓名相同并且年龄相同视为同一名学生。 + + +总结: + 1.hashMap存储自定义对象时,要实现去重,必须在自定义类中重写hashcode和equals + 2.HashMap:底层是哈希表,它要实现去重,它跟hashcode和equals有关 + 3.HashSet底层就是HashMap.(查看源码),就是将Set中的数据作为map的键,而值永远是同一个常量 + */ +public class MapDemo04 { + public static void main(String[] args) { + //定义出一个键为Student,值为String的双列集合 + HashMap map = new HashMap<>(); + + map.put(new Student("张三", 18), "苏州"); + map.put(new Student("李四", 19), "无锡"); + map.put(new Student("王五", 20), "常州"); + //业务上,我希望是王五从常州搬到了上海 + map.put(new Student("王五", 20), "上海"); + + System.out.println(map); + + HashSet sets = new HashSet<>(); + sets.add("1123"); + } +} diff --git a/javaSE-day04/src/com/inmind/map01/Student.java b/javaSE-day04/src/com/inmind/map01/Student.java new file mode 100644 index 0000000..88d31dd --- /dev/null +++ b/javaSE-day04/src/com/inmind/map01/Student.java @@ -0,0 +1,38 @@ +package com.inmind.map01; + +import java.util.Objects; + +public class Student { + String name; + int age; + + public Student(String name, int age) { + this.name = name; + this.age = age; + } + + @Override + public String toString() { + return "Student{" + + "name='" + name + '\'' + + ", age=" + age + + '}'; + } + + //重写equals的目的:为了让2个内容相同的对象,看作是同一个 + @Override + public boolean equals(Object o) { + if (o == null || getClass() != o.getClass()) return false; + + Student student = (Student) o; + return age == student.age && Objects.equals(name, student.name); + } + + //重写hashCode的目的:为了让相同内容的对象,特征码(对象的哈希值)相同 + @Override + public int hashCode() { + int result = Objects.hashCode(name); + result = 31 * result + age; + return result; + } +}