Los objetos duplicados definidos por el usuario como una clave de Java LinkedHashMap se pueden eliminar y lograr mediante la implementación de métodos equals y hashcode en los objetos definidos por el usuario.
Ejemplo:
Input : LinkedHashMap = [{[Apple, 40], Kashmir}, {[Grapes, 80], Nashik}] Duplicate key = {[Grapes, 80], Delhi} Output: LinkedHashMap = [{[Apple, 40], Kashmir}, {[Grapes, 80], Delhi}]
Sintaxis:
igual() Método:
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.
Método hashCode():
public int hashCode() // This method returns the hash code value // for the object on which this method is invoked.
A continuación se muestra la implementación del enunciado del problema:
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()); } } }
Producción
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
Complejidad de tiempo: O(1)