Если вы запускаете следующий код, hashmap отклоняет дубликат, но ArrayList принимает дубликат.
Почему arraylist также запрещает дубликат, используя методы hashcode () и equals ()?
public class EmpData {
int Id;
String FirstName;
String LastName;
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((FirstName == null) ? 0 : FirstName.hashCode());
result = prime * result + Id;
result = prime * result + ((LastName == null) ? 0 : LastName.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
EmpData other = (EmpData) obj;
if (FirstName == null) {
if (other.FirstName != null)
return false;
} else if (!FirstName.equals(other.FirstName))
return false;
if (Id != other.Id)
return false;
if (LastName == null) {
if (other.LastName != null)
return false;
} else if (!LastName.equals(other.LastName))
return false;
return true;
}
@Override
public String toString() {
return "EmpData [Id=" + Id + ", FirstName=" + FirstName + ", LastName=" + LastName + "] \n";
}
public EmpData(int id, String firstName, String lastName) {
Id = id;
FirstName = firstName;
LastName = lastName;
}
public static void main(String[] args) {
EmpData obj1 = new EmpData(1,"Mk","Jk");
EmpData obj2 = new EmpData(1,"Mk","Jk");
Map<EmpData,String> myMap = new HashMap<>(); myMap.put(obj1, "First");
myMap.put(obj2, "Second");
System.out.println("Hashmap values are: " + myMap);
ArrayList<EmpData> newArray = new ArrayList<>();
newArray.add(obj1);
newArray.add(obj2);
System.out.println("Array values are: " + newArray);
}
}
Приведенный выше код дает следующий вывод:
Hashmap values are: {EmpData [Id=1, FirstName=Mk, LastName=Jk]
=Second}
Array values are: [EmpData [Id=1, FirstName=Mk, LastName=Jk]
, EmpData [Id=1, FirstName=Mk, LastName=Jk]
]
Как я могу заставить Arraylist использовать методы hascode () и equals ()?Это тот случай, когда хэш-код и метод equals используются только с hashmap?