请你记住:需要复写hashCode和equals方法的集合 其底层数据结构必须是哈希表
哈希表是根据哈希值的不同将元素进行分类存储 哈希值其实也就是内存地址的意思
我们只要知道元素的哈希值 就知道它存在哪个内存中 也就是根据内存地址去访问内存中的数据
为什么两个方法要同时复写了?
通常采用哈希表为数据结构的集合就两种 HashSet HashMap
这两个集合一个很相似的地方就是元素唯一 不可重复
有可能出现这种情况 虽然元素的内存地址不一样 但它的内容却是一样的
因此为了保证唯一性 就是如果哈希值一样 再判断内容是否相同
举个例子
- package cn.heima.test;
- import java.util.HashSet;
- class Person
- {
- String name;
- int age;
- Person(String name,int age)
- {
- this.name=name;
- this.age=age;
- }
-
- public String toString()
- {
- return "name:"+name+"age:"+age;
- }
- }
- public class Demo {
- public static void main(String[]args)
- {
- Person p1=new Person("张三",12);
- Person p2=new Person("张三",12);
- HashSet<Person> hs=new HashSet<Person>();
- hs.add(p1);
- hs.add(p2);
- System.out.println(hs);
- //结果:[name:张三age:12, name:张三age:12]
- //两个相同的人怎么都放进一个集合之中
- }
- }
复制代码
toString这个方法在System.out.println();中会自动调用打印对象的toString方法 |