Custom Object as a Key in HashMap


In custom object as a key in hashmap example, I will show you how to work with user defined objects as keys in Map. To use user defined objects as keys in Map you need to tell Java how to compare user defined objects by overriding the hashCode() and equals() methods. Most of the time we generally use Java PI provided classes (i.e., String) as keys for HashMap. So in situations, where you need to use custom object as a key in HashMap then you can use this example.


Java 8

Example with Source Code

Creating Object key Class

Create below Book class that overrides equals() and hashCode() methods. This class will be used as a key in the HashMap.

In the below example, we have added two attributes – title and author, which will be used together as a key.

package com.roytuts.hashmap;
public class Book {
	private String title;
	private String author;
	public Book(String title, String author) {
		this.title = title; = author;
	public String getTitle() {
		return title;
	public String getAuthor() {
		return author;
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((author == null) ? 0 : author.hashCode());
		result = prime * result + ((title == null) ? 0 : title.hashCode());
		return result;
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Book other = (Book) obj;
		if (author == null) {
			if ( != null)
				return false;
		} else if (!author.equals(
			return false;
		if (title == null) {
			if (other.title != null)
				return false;
		} else if (!title.equals(other.title))
			return false;
		return true;
	public String toString() {
		return "Book [title=" + title + ", author=" + author + "]";

Related Posts:

Creating Main Class

Create below main class which will test the user defined objects as keys in Map.

Here we have put few entries into the map object first. Then we iterate through map object using Java 8’s forEach loop. Next we create an object of Book class which already exists in the map object and verify whether this book object exists or not in the map object.

package com.roytuts.hashmap;
import java.util.HashMap;
import java.util.Map;
public class HashMapCustomObject {
	public static void main(String[] args) {
		Map<Book, String> bookMap = new HashMap<>();
		bookMap.put(new Book("Java", "James Gosling"), "Java");
		bookMap.put(new Book("C++", "Bjourn Stroustup"), "C++");
		bookMap.put(new Book("C", "Denish Ritche"), "C");
		bookMap.put(new Book("Databse", "C J Date"), "Database");
		bookMap.forEach((k, v) -> System.out.println(k + " => " + v));
		Book key = new Book("Java", "James Gosling");
		System.out.println("Is key: " + key + " available? " + bookMap.containsKey(key));

Testing the Code

Run the above class to check out the output.

Book [title=C++, author=Bjourn Stroustup] => C++
Book [title=Java, author=James Gosling] => Java
Book [title=C, author=Denish Ritche] => C
Book [title=Databse, author=C J Date] => Database
Is key: Book [title=Java, author=James Gosling] available? true

Source Code

You can download source code.

Thanks for reading.

Leave a Comment