关于HashSet中索引是如何进行的
package HashSetInterview;
import java.util.Objects;
/**
* @Author:CT
* @Date:2021/2/8
* @Description:HashSetInterview
* @Version 1.0
*/
public class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = 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;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age &&
Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
package HashSetInterview;
import org.junit.Test;
import java.util.HashSet;
/**
* @Author:CT
* @Date:2021/2/8
* @Description:HashSetInterview
* @Version 1.0
*/
/*
关于HashSet的经典面试题
*/
public class HashSetInterview {
@Test
public void test()
{
HashSet hashSet=new HashSet();
Person person=new Person("AA",12);
Person person1=new Person("BB",15);
hashSet.add(person);
hashSet.add(person1);
person.setName("CC");
System.out.println(hashSet);//[Person{name='BB', age=15}, Person{name='CC', age=12}]
hashSet.remove(person);//此时remove操作会失败 因为首先会按照哈希值去寻找 “CC” 然而并没有找到 所以没有删除
System.out.println(hashSet);//[Person{name='BB', age=15}, Person{name='CC', age=12}]
hashSet.add(new Person("AA",12));
System.out.println(hashSet);//[Person{name='BB', age=15}, Person{name='CC', age=12}, Person{name='AA', age=12}]
hashSet.add(new Person("AA",12));//添加失败 会比较equals()方法
System.out.println(hashSet);//Person{name='BB', age=15}, Person{name='CC', age=12}, Person{name='AA', age=12}]
}
}