标签:dem public 自己 方法 重复 效率 存储位置 并且 div
就是对象在JVM虚拟出来的内存地址,不是实际物理内存地址。任何类均为Object类的间接子类,所以均继承方法public int hashCode()
该方法返回的值一般是通过将该对象的内部地址转换成一个十进制整数来表现的。这样能保证每个对象的哈希值不一样。
JVM当需要一个HashSet集合中存储一个元素的时候,先会调用hashCode方法比较此元素的哈希码值是在集合中存在,如果不存在就存入集合中去。如果存在,则调用equals方法比较2个哈希码值相同的元素。equals的返回值为true,则判断为同一个元素,此元素不在存储,如果为false,则存储进入到集合中去。
package demo02; import java.util.Objects; public class Student { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Student() { } public Student(String name, int age) { this.name = name; this.age = age; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Student student = (Student) o; return age == student.age && Objects.equals(name, student.name); } @Override public int hashCode() { return Objects.hash(name, age); } @Override public String toString() { return "Student{" + "name=‘" + name + ‘\‘‘ + ", age=" + age + ‘}‘; } }
测试类
package demo02; import java.util.HashSet; import java.util.Set; public class Test { public static void main(String[] args) { //多态创建集合,泛型为Student Set<Student> set = new HashSet<>(); // 添加元素 set.add(new Student("张安1", 18)); set.add(new Student("张安2", 18)); set.add(new Student("张安1", 18)); set.add(new Student("张安2", 19)); // 查看set集合中的元素 System.out.println(set);//[Student{name=‘张安1‘, age=18}, Student{name=‘张安2‘, age=19}, Student{name=‘张安2‘, age=18}] } }
标签:dem public 自己 方法 重复 效率 存储位置 并且 div
原文地址:https://www.cnblogs.com/wurengen/p/10921269.html