编辑:我刚刚阅读了您的评论,即您只想要整个集合中的一个字母 - 这听起来像是一个非常奇怪的要求,但它基本上可以通过以下方式实现:
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
你会发现这很好用——假设你的equals
方法基本上只是比较c
. (当你写“我只能在集合中只有一个元素”时,不清楚你的意思是什么——我假设你的意思是每个不同的字符只有一个元素。)
但是,我对您的FirstChar
课程提供的价值比仅使用java.lang.Character
. 有什么理由不能只使用 aSet<Character>
吗?