РЕДАКТИРОВАТЬ: Я только что прочитал ваш комментарий, что вы хотите только одну букву во всем наборе - что звучит как очень нечетное требование, но в основном это выполняется что-то вроде:
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()
* * * * * * * * 101 '* для значения, которое логически имеет только один символ, легко:
@Override
public int hashCode() {
return c; // Use implicit conversion to int
}
Проверить по контракту Object.hashCode
, и вы обнаружите, что это прекрасно работает - при условии, что ваш метод equals
в основном просто сравнивает значенияc
.(Непонятно, что вы имели в виду, когда писали «так, как я мог бы иметь только один элемент в наборе» - я предполагаю, что вы имеете в виду только один элемент на отдельный символ.)
Однако я запутался какк какому значению ваш FirstChar
класс предоставляет больше, чем java.lang.Character
.Есть ли причина, по которой вы не можете просто использовать Set<Character>
?