Так что недавно я работал над проектом "телефонная книга", который использует "Дерево двоичного поиска".
Телефонная книга использует BSTree.Каждый узел дерева является BTNode.В основном классе я заменяю E классом Pair, который имеет (имя строки, номер строки), когда я определяю узлы.
У меня есть следующий класс компаратора для сравнения между двумя типами E:
import java.util.Comparator;
public class BTNodeComparator<E extends Comparable<E>> implements Comparator<E>
{
public int compare(final E a, final E b)
{
return (a.compareTo(b));
}
}
и я использую его в BSTree.
Кроме того, я определяю метод compareTo () в классе Pair:
@Override
public int compareTo(Pair pair)
{
return name.compareTo(pair.getName());
}
Теперь, когда я запускаю программу, и она приходитдля компаратора, это дает мне ошибки в компараторе, потому что теперь он сравнивает две пары
Как я могу решить эту проблему?Что я хочу, чтобы сравнить между именами двух пар?
Эта ошибка, которую я получил после вставки второго узла (Pair) в BST:
java.lang.NullPointerException
at Pair.compareTo(Pair.java:36) // @ return name.compareTo(pair.getName());
at Pair.compareTo(Pair.java:2) // @ public class Pair implements Comparable<Pair>
at BTNodeComparator.compare(BTNodeComparator.java:24) // @ return (a.compareTo(b));
at BTNodeComparator.compare(BTNodeComparator.java:20) // @ public class BTNodeComparator<E extends Comparable<E>> implements Comparator<E>
at BSTree.search(BSTree.java:285)
at BSTree.insert(BSTree.java:300)
at PhoneBook.main(PhoneBook.java:25)
Кстати, я объявил BTNodeComparatorв BSTree следующим образом:
protected Comparator<E> c = new BTNodeComparator();
if (c.compare(target, cursor.getElement()) < 0) cursor = cursor.getLeft();
Заранее благодарен за любую помощь:)