gpt4 book ai didi

java - 设置哈希码并等于创建一个具有唯一对象的集合

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

我会创建一个 Set 完全 HashSet 以仅包含 char。例如 a,b,c,d,e ,f,g...但是这些 char 不是由原始类型表示的,但我有一个对象

public FirstChar{

private char c;

public FirstChar(char c){

this.c = c;

}
}

现在我想将对象 FirstChar 添加到一个集合中,但为了避免重复的元素,我必须实现 HashCode()equals()

我知道如何实现 equals,但我如何才能实现 hashcode 的方式让集合中只有一个元素?

注意。请不要说我使用 Eclipse

最佳答案

编辑:我刚读到你的评论,你只想要整个集合中的一个字母 - 这听起来像是一个非常奇怪的要求,但它基本上可以通过类似的东西来满足:

public final class FirstChar {

private final char c;

public FirstChar(char c) {
this.c = c;
}

@Override public int hashCode() {
return 0;
}

@Override public boolean equals(Object other) {
return other instanceof FirstChar;
}
}

换句话说,FirstChar 的每个实例被认为与所有其他实例相等,并且它们都具有相同的哈希码。正如我所说,这真的很奇怪...绝对是您想要的吗?


原始答案

实现 hashCode()对于逻辑上只有一个字符的值很容易:

@Override
public int hashCode() {
return c; // Use implicit conversion to int
}

对照Object.hashCode的契约(Contract)进行核对你会发现这很好用——假设你的 equals方法基本上只是比较 c 的值. (当你写“以我在集合中只能有一个元素的方式”时,你的意思不清楚 - 我假设你的意思是每个不同的字符只有一个元素。)

但是,我对您的 FirstChar 的值(value)感到困惑类提供超过仅使用 java.lang.Character .有什么理由不能只使用 Set<Character>

关于java - 设置哈希码并等于创建一个具有唯一对象的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8492018/

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