当前位置: 首页>后端>正文

HashSet去重原理

HashSet去重原理,第1张

package unit5;

import java.util.HashMap;

import java.util.HashSet;

import java.util.Set;

public class Java44 {

public static void main(String[] args) {

// HashSet不重复

// 注意:只对java类有效

// 原理:hashCode()、equals()

// 先计算对象的hashCode进行比较、如果没有相符的hashcode会假设没有重复出现、

// 如果发现有相同的hashCode会调用equlas方法检查是否相等、如果相等则不添加

// 解释:自定义一个类想使用hashset去重、必须重写hashcode、equals。

// HashSet的底层实现:HashSet是通过HashMap实现的!!

// 创建HashSet对象的时候、底层实际上是创建了一个HashMap集合

// ???????????public HashSet() {

// ???????????map = new HashMap<>();

// ???????????}

// HashSet添加对象的时候、底层实际上是作为key添加到HashMap中

// ???????public boolean add(E e) {

// ???????????return map.put(e, PRESENT)==null;

// ???????}

// 需求:如果名字和年龄都相同只添加一个。

Set<Person> set = new HashSet<Person>();

System.out.println(set.add(new Person("张三", 30)));

System.out.println(set.add(new Person("张三", 30)));

System.out.println(set.add(new Person("张三", 50)));

set.forEach(System.out::println);

}

}

class Person {

String name;

int age;

public Person(String name, int age) {

this.name = name;

this.age = age;

}

// 第一步:重写hashcode、返回相同的值

@Override

public int hashCode() {

return 100;

}

// 第二步:重写equals、定义相等的规则

@Override

public boolean equals(Object obj) {

Person person = (Person)obj;

return this.name.equals(person.name) && this.age==person.age;

}

@Override

public String toString() {

return "Person{" +

"name='" + name + '\'' +

", age=" + age +

'}';

}

}


https://www.xamrdz.com/backend/3m31929005.html

相关文章: