Anzeige:
Ergebnis 1 bis 3 von 3

Thema: HashMap und hashCode()

  1. #1
    Registrierter Benutzer
    Registriert seit
    07.01.2002
    Ort
    Hünibach
    Beiträge
    48

    HashMap und hashCode()

    Hallo Zusammen

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

    Ich habe folgenden Code:
    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

  2. #2
    Registrierter Benutzer
    Registriert seit
    05.04.2005
    Beiträge
    8
    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....

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

  3. #3
    Registrierter Benutzer
    Registriert seit
    07.01.2002
    Ort
    Hünibach
    Beiträge
    48
    Ohhh neiiiin, so ein sch* fehler, vielen Dank fuer deine Hilfe !!!!

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •