PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : HashMap und hashCode()



akula
02-08-2006, 16:05
Hallo Zusammen

Ich habe Probleme mit HashMap's und der hashCode()-Funktion in Java.

Ich habe folgenden Code:


import java.util.HashMap;
import java.util.Map;

public class Test
{
public static void main(String[] args)
{
Map<AddressTest, String> addressToSwitch = new HashMap<AddressTest, String>();
AddressTest a1 = new AddressTest(1,0);
AddressTest a2 = new AddressTest(1,
0);

addressToSwitch.put(a1,
"Hallo");

System.out.println(a1.hashCode() == a2.hashCode()); // ergibt true
System.out.println(addressToSwitch.containsKey(a2) ); // ergibt FALSE !!!!

}
public static class AddressTest
{
private int address1;

private int address2;

private int bus;

public AddressTest(int address1,
int address2)
{
this.address1 = address1;
this.address2 = address2;
}

public int hashCode()
{
return Integer.valueOf(address1)
.hashCode() + Integer.valueOf(address2)
.hashCode();
}

public boolean equals(Address address)
{
if (address.getAddress1() == address1) {
return true;
} else if (address.getAddress1() == address1 && address.getAddress2() == address2) {
return true;
}
return false;
}
}
}


Aus welchem Grund gibt mir das 2. println() false zurueck ? Habe ich irgendetwas uebersehen ?

vielen Dank fuer eure Hilfe

Ben

Born2Burn
02-08-2006, 17:23
Du hast equals nicht korrekt überschrieben ! Die HashMap benötigt diese Funktion aber, um die tatsächliche Korrektheit von contains zu prüfen. Dazu musst du aber equals() von Object überschreiben....



public boolean equals(Object address)
{
if(address instanceof AddressTest){
AddressTest ad = (AddressTest)address;
if (ad.address1 == address1 && ad.address2 == address2) {
return true;
}
}
return false;
}

akula
02-08-2006, 17:27
Ohhh neiiiin, so ein sch* fehler, vielen Dank fuer deine Hilfe !!!!