Search code examples
javacollectionshashhashmap

Java: Composite key in hashmaps


I would like to store a group of objects in a hashmap , where the key shall be a composite of two string values. is there a way to achieve this?

i can simply concatenate the two strings , but im sure there is a better way to do this.


Solution

  • You could have a custom object containing the two strings:

    class StringKey {
        private String str1;
        private String str2;
    }
    

    Problem is, you need to determine the equality test and the hash code for two such objects.

    Equality could be the match on both strings and the hashcode could be the hashcode of the concatenated members (this is debatable):

    class StringKey {
        private String str1;
        private String str2;
    
        @Override
        public boolean equals(Object obj) {
            if(obj != null && obj instanceof StringKey) {
                StringKey s = (StringKey)obj;
                return str1.equals(s.str1) && str2.equals(s.str2);
            }
            return false;
        }
    
        @Override
        public int hashCode() {
            return (str1 + str2).hashCode();
        }
    }