Я пытаюсь использовать HashSet, используя собственный класс "Inner" в качестве типа ключа, как показано ниже:
import java.util.HashSet;
class Inner {
int i;
String s;
public Inner(int i, String s) {
this.i = i;
this.s = s;
}
@Override
public int hashCode() {
return super.hashCode();
}
@Override
public boolean equals(Object o) {
Inner inner = (Inner) o;
return i == inner.i && s.equals(inner.s);
}
}
public class testEquals {
public static void main(String [] args) {
HashSet<Inner> hi = new HashSet<>();
hi.add(new Inner(1,"abc"));
System.out.println(hi.contains(new Inner(1,"abc")));
}
}
Он печатает "false"
(1) MyВопрос в том, что пока я пытаюсь использовать функцию «содержит», мне нужно создать новый объект из класса «Внутренний» для запроса, но поскольку это новый объект, hashcode () отличается.Поэтому я всегда получаю «ложь» для «содержит» функции.
(2) Если я изменю hashCode (), чтобы он возвращал значение «истина», как равно при одинаковых значениях, тогда в других сценариях разные объектыссылки рассматриваются как "==", как одна уникальная ссылка.
(1) и (2), кажется, конфликтуют.
Как решить эту проблему?
Спасибо!