menu
{$Head.Title}}

Übung Java Equals and Hashcode

Übung Java Equals and Hashcode

Ausgangslage

Mit dieser Übung sollen die Methoden equals(...) und hashCode() implementiert werden.
Das folgende Listing zeigt die Klasse "Userid":

package ch.std.jpf2.collections.equalshashcode;

public class Userid {

 private String userid;
 private String password;

 public Userid() {
  this("", "");
 }

 public Userid(String userid) {
  this(userid, "");
 }

 public Userid(String userid, String password) {
  super();
  this.password = password;
  this.userid = userid;
 }

 
 @Override
 public String toString() {
  return "userid:" + userid + ", password:" + password;
 }

}
Das folgende Listing zeigt die Unit Testklasse "UseridTestCase ":
package ch.std.jpf2.collections.equalshashcode;

import java.util.HashSet;
import java.util.Set;

import org.junit.Assert;
import org.junit.jupiter.api.Test;

public class UseridTestCase {

 @Test
 public void testSameEquals() {
  Userid user1 = new Userid("hans", "123");
  Userid user2 = user1;

  Assert.assertSame(user1, user2);
  Assert.assertEquals(user1, user2);
 }

 @Test
 public void testNotSame() {
  Userid user1 = new Userid("hans", "123");
  Userid user2 = new Userid("peter", "456");

  Assert.assertNotSame(user1, user2);
 }

 @Test
 public void testEquals() {
  Userid user1 = new Userid("hans", "123");
  Userid user2 = new Userid("hans", "123");

  Assert.assertEquals(user1, user2);
 }

 @Test
 public void testHashcode() {
  Userid user1 = new Userid("hans", "123");
  Userid user2 = new Userid("hans", "123");

  Assert.assertEquals(user1.hashCode(), user2.hashCode());
 }

 @Test
 public void testSet() {
  Userid user1 = new Userid("hans", "123");
  Userid user2 = new Userid("hans", "123");
  Userid user3 = new Userid("peter", "456");
  Userid user4 = new Userid("peter", "456");
  
  Set useridSet = new HashSet();
  useridSet.add(user1);
  useridSet.add(user2);
  useridSet.add(user3);
  useridSet.add(user4);
  
  Assert.assertEquals(2, useridSet.size());
  
 }
}
Vorgehen

Integrieren Sie die beiden Klassen in ihre Entwicklungsumgebung und führen Sie den JUnit Test aus. Die letzten 3 Tests werden nicht funktionieren:

Implementieren Sie nun die fehlenden Methoden equals(...) und hashCode() in die Klasse Userid, so dass alle TestCases korrekt funktionieren.

Lösung

Eine mögliche Lösung finden Sie hier