من المتعارف عليه ان الـ HashList لا تخزن عناصر متكررة على عكس ArrayList
الآن انا في حيرة من امري حيث انني اثناء محاولتي كتابة كود في برنامج طويل اردت ان استثني العناصر المتكررة فلجات الى HashList لكنني فوجئت انها تخزن تلك العناصر مهما تكررت
ساضرب مثال صغير كتبته اليوم كي اشرح المشكلة
import java.util.Comparator;
public class Employee{
private int id;
private String name;
private String address;
private double salary;
public Employee(int id, String name, String address, double salary) {
this.id = id;
this.name = name;
this.address = address;
this.salary = salary;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public String toString(){
return "ID:" + getId() + ", Name:" + getName() + ", Address:" + getAddress() + ", Salary:" + getSalary();
}
}الآن ساقوم بعمل عدة كائنات من الكلاس موظف وتخزين هذه الكائنات مرة في ArrayList ومرة في HashList
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
public class Main {
public static void main(String args[]) {
Employee ts1 = new Employee (10, "Ali", "Aleppo", 200.0);
Employee ts2 = new Employee (11, "Amal", "Berlin", 600.0);
Employee ts3 = new Employee (12, "Salim", "Homs", 250.0);
Employee ts4 = new Employee (10, "Ali", "Aleppo", 200.0);
Employee ts5 = new Employee (14, "yaser", "Damas", 210.0);
ArrayList<Employee> list = new ArrayList<Employee>();
list.add(ts1);
list.add(ts2);
list.add(ts3);
list.add(ts4);
list.add(ts5);
System.out.println("List");
System.out.println("===================================================");
for (int i = 0; i < list.size(); i++){
System.out.println(list.get(i));
}
Set<Employee> set = new HashSet<Employee>();
set.add(ts1);
set.add(ts2);
set.add(ts3);
set.add(ts4);
set.add(ts5);
System.out.println("");
System.out.println("Set");
System.out.println("===================================================");
for(Employee item: set){
System.out.println(item);
}
}
}عندها افاجأ بأن لا فرق بين النتيجتين سوء الترتيب بحيث أن HashList قامت بتخزين الموظف Ali ذو الرقم 10 مرتين
List =================================================== ID:10, Name:Ali, Address:Aleppo, Salary:200.0 ID:11, Name:Amal, Address:Berlin, Salary:600.0 ID:12, Name:Salim, Address:Homs, Salary:250.0 ID:10, Name:Ali, Address:Aleppo, Salary:200.0 ID:14, Name:yaser, Address:Damas, Salary:210.0 Set =================================================== ID:12, Name:Salim, Address:Homs, Salary:250.0 ID:10, Name:Ali, Address:Aleppo, Salary:200.0 ID:14, Name:yaser, Address:Damas, Salary:210.0 ID:10, Name:Ali, Address:Aleppo, Salary:200.0 ID:11, Name:Amal, Address:Berlin, Salary:600.0
ربما لانه الكائن يحوي عناصر متعددة فلذلك عجز الهاش ليست على المقارنة
ما الحل يا اخوة؟