Duplicate user-defined objects as a key from Java LinkedHashMap can be removed and achieved by implementing equals and hashcode methods at the user-defined objects.
Example:
Input : LinkedHashMap = [{[Apple, 40], Kashmir}, {[Grapes, 80], Nashik}] Duplicate key = {[Grapes, 80], Delhi} Output: LinkedHashMap = [{[Apple, 40], Kashmir}, {[Grapes, 80], Delhi}]
Syntax:
equals() Method:
public boolean equals (Object obj) // This method checks if some other Object // passed to it as an argument is equal to // the Object on which it is invoked.
hashCode() Method:
public int hashCode() // This method returns the hash code value // for the object on which this method is invoked.
Below is the implementation of the problem statement:
Java
// Java Program to eliminate duplicate user defined // objects as a key from Java LinkedHashMap import java.util.*;
class Employee {
private String name;
private int id;
// Constructor
public Employee(String name, int id)
{
this .name = name;
this .id = id;
}
// HashCode Method
public int hashCode()
{
System.out.println( "In hashcode method" );
int hashcode = 0 ;
return hashcode;
}
// Equals Method
public boolean equals(Object obj)
{
System.out.println( "In equals method" );
if (obj instanceof Employee) {
Employee emp = (Employee)obj;
return (emp.name.equals( this .name)
&& emp.id == this .id);
}
else {
return false ;
}
}
// Getters and Setters
public String getName() { return name; }
public void setName(String name) { this .name = name; }
public int getId() { return id; }
public void setId( int id) { this .id = id; }
public String toString()
{
return "Employee Id: " + id + " Name: " + name;
}
} // Driver code public class Duplicate_Value {
public static void main(String a[])
{
// LinkedHashMap initialization
LinkedHashMap<Employee, Integer> lhm
= new LinkedHashMap<Employee, Integer>();
// Adding entries in LinkedHashMap
lhm.put( new Employee( "John" , 1020 ), 1 );
lhm.put( new Employee( "Ravi" , 1040 ), 2 );
lhm.put( new Employee( "Jaya" , 1030 ), 3 );
// Print LinkedHashMap
for (Map.Entry<Employee, Integer> entry :
lhm.entrySet()) {
System.out.println(entry.getKey() + "=>"
+ entry.getValue());
}
// Create duplicate entry
Employee duplicate = new Employee( "John" , 1020 );
System.out.println( "Inserting duplicate record..." );
// Add duplicate entry
lhm.put(duplicate, 4 );
System.out.println( "After insertion:" );
for (Map.Entry<Employee, Integer> entry :
lhm.entrySet()) {
System.out.println(entry.getKey() + "=>"
+ entry.getValue());
}
}
} |
Output
In hashcode method In hashcode method In equals method In hashcode method In equals method Employee Id: 1020 Name: John Inserting duplicate record... In hashcode method In equals method After insertion: Employee Id: 1020 Name: John
Time Complexity: O(1)
Auxiliary Space: O(1)