Я использую HashSet для хранения объектов нового типа, которые я написал.Определение типа имеет следующий вид:
class Node{
Node arr[] = new Node[5];
boolean flag = false;
}
Я переписал hashCode следующим образом:
int hash = Arrays.deepHashCode(arr);
if(flag==true)
return hash;
else
return -hash;
и равен:
public boolean equals(Object other){
Node t = (Node) other;
return Arrays.deepEquals(arr, t.arr)&&(flag==t.flag);
}
Я добавляю словав узлы (узлы три узла), и я делаю это в порядке словаря.Затем я храню узлы в хэш-сет.Странно то, что хотя хэш-набор отлично работает для слов, начинающихся с одной буквы, как только я получаю слова, начинающиеся со следующей буквы, мой код застревает.Например, все прекрасно работает для слов, начинающихся с «а», но как только они попадают к словам, начинающимся с «б», они застревают.То же самое для 'c' и 'd' и т. Д.
Я сузил его до одной строки кода: строки, где я добавляю узел в хэш-набор.
Поскольку я не писал хешсет, я не знаю, что здесь происходит.Я уверен, что именно здесь код застревает (он не падает. Кажется, что цикл бесконечный, но я не уверен).Кто-нибудь знает, что происходит?
- Правка -
Множество царапин на голове и много печатных утверждений позже, я решил, что график, который я делал, на самом деле не был DAG, дажехотя так и должно быть, поэтому функции deepHashCode и deepEquals были сброшены.