November 22, 2018

How to cache hashcodes in an immutable class.

We can keep a member variable to store hashcode for the created object. And we will return that variable whenever, a user asks for hashcodes. Here, in this article, we will use a class which is an immutable class.

In the below class, I use hashcode instance variable to store the hashcode. Hashcode for a given object is calculated only once, in the constructor by calling calculateHashCode method.

And we return the same values whenever hashCode() function is called.

 package com.immutables;

public class HowToCacheHashcodes {

    private final int hashcode;
    private final String fName;
    private final String lName;

    public HowToCacheHashcodes(final String fName, final String lName) {
        this.fName = fName;
        this.lName = lName;
        hashcode = calculateHashCode(fName, lName);
    }

    private int calculateHashCode(String fName, String lName) {
        return  fName.hashCode() + lName.hashCode();
    }

    @Override
    public int hashCode() {
        return hashcode;
    }

    @Override
    public boolean equals(Object other) {
        if(other != null && other instanceof HowToCacheHashcodes) {
            if(other == this) return true;
            HowToCacheHashcodes otherObject =  (HowToCacheHashcodes) other;
            return this.lName.equals(otherObject.lName) && this.fName.equals(otherObject.fName);
        }
        return  false;
    }
}

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *