Создание метода equals и hashcode для связанного списка - PullRequest
0 голосов
/ 18 апреля 2011

Предполагается, что мое задание реализует определенные методы из списка и связного списка, используя односвязный список (узлы).

Мне было интересно, как бы я реализовал метод equals и метод хэш-кода, используя это, метод equals сравнивает два списка, но я не уверен, как это преобразуется в узлы, создает ли он два списка узлов? Или один идет за другим, и как мне создать метод проверки равенства?


public class List12 implements java.util.List {</p>

<p>private Node head;
  private int size;</p>

<p>private class Node{
     T data;
     Node next;
     Node previous;
     Node(T data){
       this.data = data;
     }
     public Node(){
       this.data = null;
       this.next = null;
      }</p>

<pre><code> public Node(T data, Node<T> next){
   this.data = data;
   this.next = next;
  }

 public T getData(){
   return data;
  }

 public void setData(T data){
   this.data = data;
  }

 public Node<T> getNext(){
   return next;
  }

 public void setNext(Node<T> next){
   this.next = next;
  }

}

public void removeNode (узел узла) { если (размер == 0) голова = ноль; еще { if (node ​​== head) { head = node.next; node.next.previous = null; } еще { node.next.previous = node.previous; node.previous.next = node.next; } } размер--; }

публичный узел findNode (int index) { Node myNode; myNode = head; while (индекс--> 0) myNode = myNode.next; вернуть myNode; }

public List12 () { голова = ноль; размер = 0; } Это просто код для моих узлов и его методов, я реализовал другие методы, но понятия не имею о методе равенства и хэш-кода. Спасибо за любую помощь.

Ответы [ 3 ]

1 голос
/ 18 апреля 2011

Прочитайте это: это глава 3 из "Эффективной Явы" Джошуа Блоха.Он расскажет вам, как сделать это правильно.

http://java.sun.com/developer/Books/effectivejava/Chapter3.pdf

0 голосов
/ 18 апреля 2011

Не думайте об объектах.Вы сравниваете две последовательности некоторых объектов.Неважно, как они реализованы внутри.При этом, просто сравните два списка по пунктам, одна и та же история для равных.Используйте элементы, представление бота.

Обратите внимание, что эта реализация настолько универсальна, что вы можете использовать ее для любого типа списка или даже коллекции.

0 голосов
/ 18 апреля 2011

Вы можете использовать служебный класс EqualsBuilder из Apache Commons Apache EqualsBuilder . Этот класс предоставляет методы для построения хорошего метода равенства для любого класса. Он следует правилам, изложенным в Effective Java Джошуа Блохом. Кроме того, общие ресурсы Apache содержат также класс HashCodeBuilder .

Типичное использование для кода следующее (из EqualsBuilder javadoc):

public boolean equals(Object obj) {
if (obj == null) { return false; }
if (obj == this) { return true; }
if (obj.getClass() != getClass()) {
 return false;
}
MyClass rhs = (MyClass) obj;
return new EqualsBuilder()
             .appendSuper(super.equals(obj))
             .append(field1, rhs.field1)
             .append(field2, rhs.field2)
             .append(field3, rhs.field3)
             .isEquals();

}

...