equals and hashcode methods in Java

Let’s look at the example first,

package com.bruiser.java8.model;


public class StudentWithOutEqualsAndHashCode {
	
	private String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public StudentWithOutEqualsAndHashCode(String name) {
		super();
		this.name = name;
	}
		

}
package com.bruiser.java8.model;

import java.util.Objects;

public class StudentWithEquals {
	
	private String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		StudentWithEquals other = (StudentWithEquals) obj;
		return Objects.equals(name, other.name);
	}

	public StudentWithEquals(String name) {
		super();
		this.name = name;
	}
	
	

}
package com.bruiser.java8.model;

import java.util.Objects;

public class StudentWithHashCode {
	
	private String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public int hashCode() {
		return Objects.hash(name);
	}

	public StudentWithHashCode(String name) {
		super();
		this.name = name;
	}
		

}
package com.bruiser.java8.model;

import java.util.Objects;

public class StudentWithEqualsAndHashCode {
	
	private String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public int hashCode() {
		return Objects.hash(name);
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		StudentWithEqualsAndHashCode other = (StudentWithEqualsAndHashCode) obj;
		return Objects.equals(name, other.name);
	}

	public StudentWithEqualsAndHashCode(String name) {
		super();
		this.name = name;
	}
	
	

}
package com.bruiser.java.object;

import java.util.HashMap;
import java.util.Map;

import com.bruiser.java8.model.StudentWithEquals;
import com.bruiser.java8.model.StudentWithEqualsAndHashCode;
import com.bruiser.java8.model.StudentWithHashCode;
import com.bruiser.java8.model.StudentWithOutEqualsAndHashCode;

public class EqualsAndHashCodeDemo {

	public static void main(String[] args) {
		
		
		Map<StudentWithOutEqualsAndHashCode, Integer> mapWithoutEqualsHash = new HashMap<>();
		mapWithoutEqualsHash.put((new StudentWithOutEqualsAndHashCode("TechBruiser")), 1);
		mapWithoutEqualsHash.put((new StudentWithOutEqualsAndHashCode("TechBruiser")), 1);
		System.out.println("Size of mapWithoutEqualsHash :: "+ mapWithoutEqualsHash.size());
		
		Map<StudentWithEquals, Integer> mapWithEquals = new HashMap<>();
		mapWithEquals.put((new StudentWithEquals("TechBruiser")), 1);
		mapWithEquals.put((new StudentWithEquals("TechBruiser")), 1);
		System.out.println("Size of mapWithEquals :: "+ mapWithEquals.size());
		
		Map<StudentWithHashCode, Integer> mapWithHash = new HashMap<>();
		mapWithHash.put((new StudentWithHashCode("TechBruiser")), 1);
		mapWithHash.put((new StudentWithHashCode("TechBruiser")), 1);
		System.out.println("Size of mapWithHash :: "+ mapWithHash.size());
		
		Map<StudentWithEqualsAndHashCode, Integer> mapWithEqualsHash = new HashMap<>();
		mapWithEqualsHash.put((new StudentWithEqualsAndHashCode("TechBruiser")), 1);
		mapWithEqualsHash.put((new StudentWithEqualsAndHashCode("TechBruiser")), 1);
		System.out.println("Size of mapWithEqualsHash :: "+ mapWithEqualsHash.size());
		

	}

}
Size of mapWithoutEqualsHash :: 2 
Size of mapWithEquals :: 2
 Size of mapWithHash :: 2 
Size of mapWithEqualsHash :: 1