Реализация сопоставимого класса Tree

Мое задание связано с кодировкой Хаффмана, и для ее создания я использую приоритетную очередь деревьев. Я пытаюсь реализовать сопоставимый класс для моего дерева, а затем использую метод сравнения, чтобы деревья можно было сортировать в очереди приоритетов по частоте. Я получаю сообщения об ошибках при попытке сделать это, и я не уверен, почему.

n00832607.java:249: error: Tree is not abstract and does not override abstract method  
compareTo(Object) in Comparable
class Tree implements Comparable
^
n00832607.java:423: error: method does not override or implement a method from a supertype
@Override 
^

Вот код, который вызывает у меня проблемы.

//Begin tree class
class Tree implements Comparable
{
private Node root;             // first node of tree

// -------------------------------------------------------------
public Tree(char data, int frequency)                  // constructor
  { 
  root = new Node(); 
  root.iData = frequency;
  root.dData = data;
  } 

public Tree(Tree leftChild, Tree rightChild)
  {
  root = new Node();
  root.leftChild = leftChild.root;
  root.rightChild = rightChild.root;
  root.iData = leftChild.root.iData + rightChild.root.iData;
  }

protected Tree(Node root)
  {
  this.root = root;
  }                   
  //end constructors

//Misc tree methods inbetween the constructors and compareTo, I can post them if that would help


@Override 
public int compareTo(Tree arg0)
{
 Integer freq1 = new Integer(this.root.iData);
 Integer freq2 = new Integer(arg0.root.iData);
 return freq1.compareTo(freq2);
}
}  // end class Tree
////////////////////////////////////////////////////////////////

Также вот мой класс Node, если это поможет

//Begin node class
////////////////////////////////////////////////////////////////
class Node
{
public int iData;              // data item (frequency/key)
public char dData;           // data item (character)
public Node leftChild;         // this node's left child
public Node rightChild;        // this node's right child

public void displayNode()      // display ourself
  {
  System.out.print('{');
  System.out.print(iData);
  System.out.print(", ");
  System.out.print(dData);
  System.out.print("} ");
  }
}  // end class Node
////////////////////////////////////////////////////////////////

person Fluxxxy    schedule 09.03.2014    source источник


Ответы (1)


Вы используете необработанный тип Comparable вместо универсального типа Comparable<Tree>. Таким образом, чтобы скомпилировать как есть, ваш метод compareTo() должен принимать объект в качестве аргумента, а не дерево. Но, конечно, правильный способ исправить это — заставить ваш класс реализовать Comparable<Tree>.

Также обратите внимание, что вместо создания двух новых экземпляров Integer при каждом сравнении вы можете просто использовать (начиная с Java 7):

return Integer.compare(this.root.iData, arg0.root.iData);
person JB Nizet    schedule 09.03.2014
comment
Большое спасибо, это решило мою проблему. У меня есть еще одна проблема, связанная с HashMaps, мне следует отредактировать свой вопрос или создать новый? - person Fluxxxy; 09.03.2014