Я установил структуру данных кругового связанного списка, которая представляет слово, и каждый элемент в списке представляет собой букву от слова. Внизу моего вопроса находятся определения классов для списка и элемента списка.
Цель структуры данных списка - иметь возможность сравнивать циклические слова. Итак ... "картинка" и "турпик" - это одно и то же циклическое слово, поэтому два списка будут равны.
Поэтому я переопределяю equals ()
при сравнении двух списков, и я читал, что всякий раз, когда вам нужно переопределить equals ()
, вы также должны переопределить hashCode ()
. Однако я не очень хорошо понимаю, как это сделать.
Как мне определить хороший хэш-код для того, что я настроил? Что мне следует учитывать? В примере с «картинкой» и «турпиком» два списка равны, поэтому их хэш-код должен быть одинаковым. Есть идеи?
Спасибо, Христо
public class Letter {
char value;
Letter theNextNode;
/**
* Default constructor for an element of the list.
*
* @param theCharacter - the value for this node.
*/
Letter(char theCharacter) {
this.value = theCharacter;
}
}
public class CircularWord {
/*
* Class Variables
*/
Letter head;
Letter tail;
Letter theCurrentNode;
int iNumberOfElements;
/**
* Default Constructor. All characters that make up 'theWord' are stored in a
* circular linked list structure where the tail's NEXT is the head.
*/
public CircularWord(String theWord) {
char[] theCharacters = theWord.toCharArray();
for (int iIndex = 0; iIndex < theCharacters.length; iIndex++) {
this.addElement(theCharacters[iIndex]);
}
this.theCurrentNode = head;
this.iNumberOfElements = theCharacters.length;
}
}