Skip to content

Yet another programming solutions log

Sample bits from programming for the future generations.

Technologies Technologies
  • Algorithms and Data Structures
  • Java Tutorials
  • JUnit Tutorial
  • MongoDB Tutorial
  • Quartz Scheduler Tutorial
  • Spock Framework Tutorial
  • Spring Framework
  • Bash Tutorial
  • Clojure Tutorial
  • Design Patterns
  • Developer’s Tools
  • Productivity
  • About
Expand Search Form

Java Objects equals hashcode

farenda 2015-09-03 0

Problem:

How to implement equals and hashcode using java.util.Objects? In the following example we show how to use these great, null-insensitive helper methods.

Solution:

Java 7 came with long time awaited utility class java.util.Objects. It contains static helper methods for working with objects. Here we show how to use equals and hash methods that are null-insensitive and ease implementation of equals and hashcode:

package com.farenda.java.util;

import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.Objects;

public class ObjectsEqualsHashcode {

    public static class Player {
        public final String login;

        public Player(String login) {
            this.login = login;
        }

        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;
            Player player = (Player) o;
            // accepts nulls:
            return Objects.equals(login, player.login);
        }

        @Override
        public int hashCode() {
            // varargs and accepts nulls:
            return Objects.hash(login);
        }

        @Override
        public String toString() {
            return "Player{login='" + login + "'}";
        }
    }

    public static void main(String[] args) {
        Collection<Player> players = Arrays.asList(
                new Player(null),
                new Player("player1"),
                new Player("player2"));
        System.out.println("Players: " + players);

        Collection<Player> sortedPlayers = new HashSet<>(players);
        System.out.println("In Set: " + sortedPlayers);

        // will not throw NullPointerException:
        sortedPlayers.contains(new Player(null));
    }
}

The code is straightforward. There are two important things:

  1. Objects.equals() and Objects.hash() accepts null.
  2. Objects.hash() accepts many objects.

And here’s the output of running the code:

Players: [Player{login='null'}, Player{login='player1'}, Player{login='player2'}]
In Set: [Player{login='player2'}, Player{login='player1'}, Player{login='null'}]
Share with the World!
Categories Java Tags java, java-basics
Previous: Spring properties file
Next: Java null check

Recent Posts

  • Java 8 Date Time concepts
  • Maven dependency to local JAR
  • Caesar cipher in Java
  • Java casting trick
  • Java 8 flatMap practical example
  • Linked List – remove element
  • Linked List – insert element at position
  • Linked List add element at the end
  • Create Java Streams
  • Floyd Cycle detection in Java

Pages

  • About Farenda
  • Algorithms and Data Structures
  • Bash Tutorial
  • Bean Validation Tutorial
  • Clojure Tutorial
  • Design Patterns
  • Java 8 Streams and Lambda Expressions Tutorial
  • Java Basics Tutorial
  • Java Collections Tutorial
  • Java Concurrency Tutorial
  • Java IO Tutorial
  • Java Tutorials
  • Java Util Tutorial
  • Java XML Tutorial
  • JUnit Tutorial
  • MongoDB Tutorial
  • Quartz Scheduler Tutorial
  • Software Developer’s Tools
  • Spock Framework Tutorial
  • Spring Framework

Tags

algorithms bash bean-validation books clojure design-patterns embedmongo exercises git gof gradle groovy hateoas hsqldb i18n java java-basics java-collections java-concurrency java-io java-lang java-time java-util java-xml java8 java8-files junit linux lists log4j logging maven mongodb performance quartz refactoring regex rest slf4j solid spring spring-boot spring-core sql unit-tests

Yet another programming solutions log © 2022

sponsored