gpt4 book ai didi

java - HashSet 中有多少个唯一对象以及使用哪个方法检查唯一性等于或 hashCode

转载 作者:行者123 更新时间:2023-11-29 05:29:38 25 4
gpt4 key购买 nike

<分区>

考虑下面的代码

import java.util.HashSet;
import java.util.Random;
import java.util.Set;


public class Test {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

Person p1= new Person();
//Person p2= new Person();
p1.setName("same1");
//p2.setName("same2");
Person p2=p1;
Set<Person> set= new HashSet<Person>();
set.add(p1);
set.add(p2);
for(Person p: set){
System.out.println(set.size()+">>"+p.getName()+" hashcode "+p.hashCode());
}


}

}

class Person{
private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

@Override
public boolean equals(Object obj){
return true;

}

@Override
public int hashCode() {
Random ran = new Random();
int x = ran.nextInt(6) + 5;
System.out.println("in hahcode method"+x);
return x;
}
}

由于集合不包含重复项,这里我从 equals 方法返回 true 并为同一对象返回不同的哈希码。 HashSet 将它们视为唯一对象。到目前为止一切顺利,因为 HashSet 在内部使用 HashMap 来存储对象。

从上面的代码片段可以看出,HashSet 使用 hashCode 来检查唯一性不等于方法。如果两个对象的hashCode不同,不管它们是否相等都会存入HashSet?如果我遗漏了什么,请告诉我。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com