HashMap containsKey() returns false although hashCode() and equals() are trueWhat issues should be considered when overriding equals and hashCode in Java?What issues should be considered when overriding equals and hashCode in Java?Java HashMap with overridden hashCode() and equals() returns no dataJava - HashMap and HashSet not backed by Object.hashCode()?java: LinkedHashMap containsKey=true but get returns nullHashMap with incorrect equals and HashCode implementationNumber of calls of hashCode() and equals() in case of HashSet.contains() if hashcode returns a constant valueBoolean hashCode return valueoverriding equals issue in hashmapDifferent behaviors for HashMap and Hashtable when Equals overridden to always return FalseWhy is 'equals' in Java true with different hashcodes?

India just shot down a satellite from the ground. At what altitude range is the resulting debris field?

A particular customize with green line and letters for subfloat

Is exact Kanji stroke length important?

How do I extract a value from a time formatted value in excel?

How do I find the solutions of the following equation?

How to be diplomatic in refusing to write code that breaches the privacy of our users

Escape a backup date in a file name

Gears on left are inverse to gears on right?

Are student evaluations of teaching assistants read by others in the faculty?

Detecting if an element is found inside a container

Would a high gravity rocky planet be guaranteed to have an atmosphere?

Why not increase contact surface when reentering the atmosphere?

How does it work when somebody invests in my business?

Class Action - which options I have?

Unreliable Magic - Is it worth it?

How can I kill an app using Terminal?

Why are there no referendums in the US?

What is paid subscription needed for in Mortal Kombat 11?

Term for the "extreme-extension" version of a straw man fallacy?

Do all network devices need to make routing decisions, regardless of communication across networks or within a network?

Balance Issues for a Custom Sorcerer Variant

Sort a list by elements of another list

You cannot touch me, but I can touch you, who am I?

Why escape if the_content isnt?



HashMap containsKey() returns false although hashCode() and equals() are true


What issues should be considered when overriding equals and hashCode in Java?What issues should be considered when overriding equals and hashCode in Java?Java HashMap with overridden hashCode() and equals() returns no dataJava - HashMap and HashSet not backed by Object.hashCode()?java: LinkedHashMap containsKey=true but get returns nullHashMap with incorrect equals and HashCode implementationNumber of calls of hashCode() and equals() in case of HashSet.contains() if hashcode returns a constant valueBoolean hashCode return valueoverriding equals issue in hashmapDifferent behaviors for HashMap and Hashtable when Equals overridden to always return FalseWhy is 'equals' in Java true with different hashcodes?













6















I have a HashMap<Vertex, Integer> called vertexIndexes. If I iterate through it with this code:



public boolean search(String vertexName)
for (Vertex name: vertexIndexes.keySet())
String key = name.toString();
String value = vertexIndexes.get(name).toString();
System.out.println(key + " " + value + " "+ (name.hashCode() == vertexName.hashCode()) + " " + name.equals(vertexName));

...



it produces this output:



Diessen 0 false false
Herrsching 5 false false
Schondorf 2 false false
Greifenberg 3 false false
Stegen 4 false false
Utting 1 false false
Andechs 6 false false
Fischen 7 true true


So you can see, that the Vertex Fischen is present and the hashCode and equals methods work fine. But if I run



vertexIndexes.containsKey("Fischen")


it returns false.



Why is that? I lose my mind over it.










share|improve this question



















  • 12





    So the keys are instances of Vertex, not of String? But the key you are checking for is a String. A String will never be equal to anything but another String.

    – khelwood
    yesterday












  • As you can see in my output (..true true..): I implemented the toString() and equals method of Vertex to correctly compare it to a String.

    – gutenmorgenuhu
    yesterday






  • 9





    toString() is irrelevant, and even if your Vertex instance claims to be equal to a String, the String instance will not say it is equal to a Vertex.

    – khelwood
    yesterday












  • @khelwood unless in a very alternative implementation of an equals method :)

    – Stultuske
    yesterday






  • 1





    Possible duplicate of What issues should be considered when overriding equals and hashCode in Java?

    – Lino
    yesterday















6















I have a HashMap<Vertex, Integer> called vertexIndexes. If I iterate through it with this code:



public boolean search(String vertexName)
for (Vertex name: vertexIndexes.keySet())
String key = name.toString();
String value = vertexIndexes.get(name).toString();
System.out.println(key + " " + value + " "+ (name.hashCode() == vertexName.hashCode()) + " " + name.equals(vertexName));

...



it produces this output:



Diessen 0 false false
Herrsching 5 false false
Schondorf 2 false false
Greifenberg 3 false false
Stegen 4 false false
Utting 1 false false
Andechs 6 false false
Fischen 7 true true


So you can see, that the Vertex Fischen is present and the hashCode and equals methods work fine. But if I run



vertexIndexes.containsKey("Fischen")


it returns false.



Why is that? I lose my mind over it.










share|improve this question



















  • 12





    So the keys are instances of Vertex, not of String? But the key you are checking for is a String. A String will never be equal to anything but another String.

    – khelwood
    yesterday












  • As you can see in my output (..true true..): I implemented the toString() and equals method of Vertex to correctly compare it to a String.

    – gutenmorgenuhu
    yesterday






  • 9





    toString() is irrelevant, and even if your Vertex instance claims to be equal to a String, the String instance will not say it is equal to a Vertex.

    – khelwood
    yesterday












  • @khelwood unless in a very alternative implementation of an equals method :)

    – Stultuske
    yesterday






  • 1





    Possible duplicate of What issues should be considered when overriding equals and hashCode in Java?

    – Lino
    yesterday













6












6








6


0






I have a HashMap<Vertex, Integer> called vertexIndexes. If I iterate through it with this code:



public boolean search(String vertexName)
for (Vertex name: vertexIndexes.keySet())
String key = name.toString();
String value = vertexIndexes.get(name).toString();
System.out.println(key + " " + value + " "+ (name.hashCode() == vertexName.hashCode()) + " " + name.equals(vertexName));

...



it produces this output:



Diessen 0 false false
Herrsching 5 false false
Schondorf 2 false false
Greifenberg 3 false false
Stegen 4 false false
Utting 1 false false
Andechs 6 false false
Fischen 7 true true


So you can see, that the Vertex Fischen is present and the hashCode and equals methods work fine. But if I run



vertexIndexes.containsKey("Fischen")


it returns false.



Why is that? I lose my mind over it.










share|improve this question
















I have a HashMap<Vertex, Integer> called vertexIndexes. If I iterate through it with this code:



public boolean search(String vertexName)
for (Vertex name: vertexIndexes.keySet())
String key = name.toString();
String value = vertexIndexes.get(name).toString();
System.out.println(key + " " + value + " "+ (name.hashCode() == vertexName.hashCode()) + " " + name.equals(vertexName));

...



it produces this output:



Diessen 0 false false
Herrsching 5 false false
Schondorf 2 false false
Greifenberg 3 false false
Stegen 4 false false
Utting 1 false false
Andechs 6 false false
Fischen 7 true true


So you can see, that the Vertex Fischen is present and the hashCode and equals methods work fine. But if I run



vertexIndexes.containsKey("Fischen")


it returns false.



Why is that? I lose my mind over it.







java hashmap






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited yesterday









Eran

290k37478563




290k37478563










asked yesterday









gutenmorgenuhugutenmorgenuhu

1,67011229




1,67011229







  • 12





    So the keys are instances of Vertex, not of String? But the key you are checking for is a String. A String will never be equal to anything but another String.

    – khelwood
    yesterday












  • As you can see in my output (..true true..): I implemented the toString() and equals method of Vertex to correctly compare it to a String.

    – gutenmorgenuhu
    yesterday






  • 9





    toString() is irrelevant, and even if your Vertex instance claims to be equal to a String, the String instance will not say it is equal to a Vertex.

    – khelwood
    yesterday












  • @khelwood unless in a very alternative implementation of an equals method :)

    – Stultuske
    yesterday






  • 1





    Possible duplicate of What issues should be considered when overriding equals and hashCode in Java?

    – Lino
    yesterday












  • 12





    So the keys are instances of Vertex, not of String? But the key you are checking for is a String. A String will never be equal to anything but another String.

    – khelwood
    yesterday












  • As you can see in my output (..true true..): I implemented the toString() and equals method of Vertex to correctly compare it to a String.

    – gutenmorgenuhu
    yesterday






  • 9





    toString() is irrelevant, and even if your Vertex instance claims to be equal to a String, the String instance will not say it is equal to a Vertex.

    – khelwood
    yesterday












  • @khelwood unless in a very alternative implementation of an equals method :)

    – Stultuske
    yesterday






  • 1





    Possible duplicate of What issues should be considered when overriding equals and hashCode in Java?

    – Lino
    yesterday







12




12





So the keys are instances of Vertex, not of String? But the key you are checking for is a String. A String will never be equal to anything but another String.

– khelwood
yesterday






So the keys are instances of Vertex, not of String? But the key you are checking for is a String. A String will never be equal to anything but another String.

– khelwood
yesterday














As you can see in my output (..true true..): I implemented the toString() and equals method of Vertex to correctly compare it to a String.

– gutenmorgenuhu
yesterday





As you can see in my output (..true true..): I implemented the toString() and equals method of Vertex to correctly compare it to a String.

– gutenmorgenuhu
yesterday




9




9





toString() is irrelevant, and even if your Vertex instance claims to be equal to a String, the String instance will not say it is equal to a Vertex.

– khelwood
yesterday






toString() is irrelevant, and even if your Vertex instance claims to be equal to a String, the String instance will not say it is equal to a Vertex.

– khelwood
yesterday














@khelwood unless in a very alternative implementation of an equals method :)

– Stultuske
yesterday





@khelwood unless in a very alternative implementation of an equals method :)

– Stultuske
yesterday




1




1





Possible duplicate of What issues should be considered when overriding equals and hashCode in Java?

– Lino
yesterday





Possible duplicate of What issues should be considered when overriding equals and hashCode in Java?

– Lino
yesterday












1 Answer
1






active

oldest

votes


















39














name.equals(vertexName) compares a Vertex to a String. While your Vertex class equals method might return true when you pass a String to it, String's equals will never return true when you pass a Vertex to it.



HashMap probably tests whether vertexName.equals(name), which returns false.



Change



vertexIndexes.containsKey("Fischen")


to



vertexIndexes.containsKey(new Vertex("Fischen"))


or change the key of your Map to String.



BTW, you could have avoided that issue in the first place if you followed the contract of the equals method that appears in the Javadoc of the Object class:




• It is symmetric: for any non-null reference values x and y, x.equals(y) should return true if and only if y.equals(x) returns true.




Your equals implementation is not symmetric.






share|improve this answer
























    Your Answer






    StackExchange.ifUsing("editor", function ()
    StackExchange.using("externalEditor", function ()
    StackExchange.using("snippets", function ()
    StackExchange.snippets.init();
    );
    );
    , "code-snippets");

    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "1"
    ;
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function()
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled)
    StackExchange.using("snippets", function()
    createEditor();
    );

    else
    createEditor();

    );

    function createEditor()
    StackExchange.prepareEditor(
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader:
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    ,
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    );



    );













    draft saved

    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55354319%2fhashmap-containskey-returns-false-although-hashcode-and-equals-are-true%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    39














    name.equals(vertexName) compares a Vertex to a String. While your Vertex class equals method might return true when you pass a String to it, String's equals will never return true when you pass a Vertex to it.



    HashMap probably tests whether vertexName.equals(name), which returns false.



    Change



    vertexIndexes.containsKey("Fischen")


    to



    vertexIndexes.containsKey(new Vertex("Fischen"))


    or change the key of your Map to String.



    BTW, you could have avoided that issue in the first place if you followed the contract of the equals method that appears in the Javadoc of the Object class:




    • It is symmetric: for any non-null reference values x and y, x.equals(y) should return true if and only if y.equals(x) returns true.




    Your equals implementation is not symmetric.






    share|improve this answer





























      39














      name.equals(vertexName) compares a Vertex to a String. While your Vertex class equals method might return true when you pass a String to it, String's equals will never return true when you pass a Vertex to it.



      HashMap probably tests whether vertexName.equals(name), which returns false.



      Change



      vertexIndexes.containsKey("Fischen")


      to



      vertexIndexes.containsKey(new Vertex("Fischen"))


      or change the key of your Map to String.



      BTW, you could have avoided that issue in the first place if you followed the contract of the equals method that appears in the Javadoc of the Object class:




      • It is symmetric: for any non-null reference values x and y, x.equals(y) should return true if and only if y.equals(x) returns true.




      Your equals implementation is not symmetric.






      share|improve this answer



























        39












        39








        39







        name.equals(vertexName) compares a Vertex to a String. While your Vertex class equals method might return true when you pass a String to it, String's equals will never return true when you pass a Vertex to it.



        HashMap probably tests whether vertexName.equals(name), which returns false.



        Change



        vertexIndexes.containsKey("Fischen")


        to



        vertexIndexes.containsKey(new Vertex("Fischen"))


        or change the key of your Map to String.



        BTW, you could have avoided that issue in the first place if you followed the contract of the equals method that appears in the Javadoc of the Object class:




        • It is symmetric: for any non-null reference values x and y, x.equals(y) should return true if and only if y.equals(x) returns true.




        Your equals implementation is not symmetric.






        share|improve this answer















        name.equals(vertexName) compares a Vertex to a String. While your Vertex class equals method might return true when you pass a String to it, String's equals will never return true when you pass a Vertex to it.



        HashMap probably tests whether vertexName.equals(name), which returns false.



        Change



        vertexIndexes.containsKey("Fischen")


        to



        vertexIndexes.containsKey(new Vertex("Fischen"))


        or change the key of your Map to String.



        BTW, you could have avoided that issue in the first place if you followed the contract of the equals method that appears in the Javadoc of the Object class:




        • It is symmetric: for any non-null reference values x and y, x.equals(y) should return true if and only if y.equals(x) returns true.




        Your equals implementation is not symmetric.







        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited yesterday

























        answered yesterday









        EranEran

        290k37478563




        290k37478563





























            draft saved

            draft discarded
















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid …


            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.

            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55354319%2fhashmap-containskey-returns-false-although-hashcode-and-equals-are-true%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            -hashmap, java

            Popular posts from this blog

            Word for a person who has no opinion about whether god existsWord for having a definite opinion while simultaneously withholding judgment?What's the opposite of “newcomer? Is ”veteran" OK?What do you call an “atheist” who might believe in an afterlife?What's a word for someone who wants to voice opinions but not have them challenged?Word for someone who dismisses contrary opinions as irrational?Somone who thinks they are overly special/out of the ordinaryIs there a word, phrase or idiom for “a person who is incapable of thinking about the future”?The belief that a god is human-likeA word for a non-famous person/thing you have heard a lot aboutAdjective for a person who enjoys taking care of their appearance

            2017 IndyCar Series Contents Series news Teams and drivers Schedule Season summary Footnotes References External links Navigation menu"INDYCAR: Initial 2018 bodywork concepts unveiled"the original"IndyCar confirms switch to Performance Friction brakes in 2017""AJ Foyt Racing will switch to Chevy"the original"Carlos Munoz, Conor Daly will drive for AJ Foyt Racing""Zach Veach's Indy 500 Debut Confirmed with Foyt""No mass exodus from Honda after Ganassi switch""Ex-F1 driver Sato joins Andretti Autosport for 2017 IndyCar season""IndyCar's Ryan Hunter-Reay, sponsor DHL paired through 2020""hhgregg and Andretti Autosport announce partnership for key races in 2016""INDYCAR: Rossi re-signs with Andretti"the original"McLaren Formula 1 - Fernando Alonso to race at Indy 500 with McLaren, Honda and Andretti Autosport""Shank will finally take part in Indy 500 with Harvey, Andretti | MotorSportsTalk""Andretti adds Jack Harvey to Indy 500 field""Ganassi switches to Honda power for 2017""INDYCAR: Chilton returns to Ganassi"the original"IndyCar silly season: Who's going where in 2017?""INDYCAR: Kanaan, NTT Data return to Ganassi"the original"Kimball to remain at Ganassi for 2017""Coyne confirms Bourdais for 2017 IndyCar season""Davison to sub for Bourdais in Indy 500"the original"Gutierrez confirmed for Detroit IndyCar debut""Gutierrez returns with Coyne for rest of 2017 season""Vautier to drive for Coyne at Texas"the original"INDYCAR: Coyne confirms Jones for 2017"the original"Pippa Mann returns to Coyne for Indy 500""Karam, Dreyer & Reinbold teaming up again for Indianapolis 500""Pigot to return to Ed Carpenter Racing""Hildebrand confirmed as full-time Ed Carpenter driver""Veach to replace injured Hildebrand at Barber"the originalNew Team Harding Racing Enters Chaves for 101st Indianapolis 500"Juncos Racing Announces Entry in 101st Running of the Indianapolis 500 :: Juncos Racing""Juncos confirms Pigot for Indy 500""Saavedra confirmed in Juncos' second 500 entry"the original"Lazier confirms Indy 500 run after son's USF2000 debut"the original"Claman DeMelo to race for RLLR at Sonoma"the original"Rahal signs Servia and ace engineer for 2017""IndyCar: Aleshin returns with Schmidt"the original"Aleshin replaced by Saavedra for Toronto""Jack Harvey will pilot SPM No. 7 car at Watkins Glen, Sonoma""Jay Howard confirmed in Tony Stewart's supported SPM Indy entry""INDYCAR: Newgarden to wave the flag at Penske"the original"Pagenaud opts for No. 1 in 2017"the original"Penske confirms Newgarden for 2017""Montoya to stay with Team Penske in 2017""Target leaving IndyCar after 27 seasons with Chip Ganassi""Cavin: IndyCar could see complete driver/team shakeup in 2017""End of the road for KV Racing?""KV Racing confirms closure, equipment sold to Juncos""Juncos confirms IndyCar Series entry"the original"Juncos readies IndyCar program, aims for '17 500"the original"Harding Racing to add Texas, Pocono to schedule"the original"Sato signs with Andretti Autosport for 2017""INDYCAR: Aleshin in Doubt at SPM"the original"Long Beach notebook: JR Hildebrand breaks hand""Hildebrand cleared to return at Phoenix"the original"Bourdais to undergo surgery on multiple fractures""Aleshin loses Schmidt Peterson IndyCar ride""Saavedra in at SPM for Pocono, Gateway"the original"Bourdais to make return at Gateway"the original"The IndyCar Grand Prix no longer is sponsored by Angie's List""2017 IndyCar Series rulebook""2017 Verizon IndyCar Series Official Rulebook"Official websiteeeeee

            Can I sign legal documents with a smiley face?Do Legal Documents Require Signing In Standard Pen Colors?Is it possible to legally prohibit someone from linking to specific pages on your website?Do scans of signed documents have the same legal power as the original document?What can I do if I signed an excessively restrictive contract?Can other party sneak in new contract terms via termination notice?How to prove that someone forged my signature on a contract that I was not aware of?In Australia, Is it legal to sign a document as somebody else?making a contract that includes video licenceLease dispute, over email and text messageIf you must include all of the natural language prose in a legal document, or if it can be abstracted outE-signing: legal ramifications of “identifying” a person