HashSet无序不可重复的集合容器,当遇到重复的元素是,不可以添加呢,还是添加后把原位置元素覆盖了,我们通过代码来验证,首先写一个员工类,姓名,年龄,工资属性,重写hascode和 euqals 方法,当出现重复元素后,无法自动添加,我们在给employee添加一个 employeeId 属性,通过对相同元素的Id赋值,比较发现,hashset碰到重复的元素后,不在添加,而不是覆盖。
public class Demo {
@Test
public void test(){
Set<Employee> employees = new HashSet<>();
employees.add(new Employee("tom",24,3500));
employees.add(new Employee("tom",24,3500,1001));
employees.add(new Employee("jack",26,5500));
employees.add(new Employee("jerry",28,850));
employees.add(new Employee("jackson",24,3500));
employees.add(new Employee("jac",29,7500));
employees.add(new Employee("jay",21,6600));
Iterator<Employee> iterator = employees.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
private class Employee {
private String employeeName;
private int age;
private double salary;
private int employeeId;
public Employee() {
}
public Employee(String employeeName, int age, double salary) {
this.employeeName = employeeName;
this.age = age;
this.salary = salary;
}
public Employee(String employeeName, int age, double salary,int employeeId) {
this.employeeName = employeeName;
this.age = age;
this.salary = salary;
this.employeeId = employeeId;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Employee employee = (Employee) o;
if (age != employee.age) return false;
if (Double.compare(employee.salary, salary) != 0) return false;
return employeeName != null ? employeeName.equals(employee.employeeName) : employee.employeeName == null;
}
@Override
public int hashCode() {
int result;
long temp;
result = employeeName != null ? employeeName.hashCode() : 0;
result = 31 * result + age;
temp = Double.doubleToLongBits(salary);
result = 31 * result + (int) (temp ^ (temp >>> 32));
return result;
}
@Override
public String toString() {
return "Employee{" +
"employeeName='" + employeeName + '\'' +
", age=" + age +
", salary=" + salary +
", employeeId=" + employeeId +
'}';
}
}
}
运行结果如下:
Employee{employeeName='jackson', age=24, salary=3500.0, employeeId=0}
Employee{employeeName='jay', age=21, salary=6600.0, employeeId=0}
Employee{employeeName='jerry', age=28, salary=850.0, employeeId=0}
Employee{employeeName='tom', age=24, salary=3500.0, employeeId=0}
Employee{employeeName='jack', age=26, salary=5500.0, employeeId=0}
Employee{employeeName='jac', age=29, salary=7500.0, employeeId=0}
经过测试 HashSet在添加元素的时候碰到重复的元素,就不再添加,而不是覆盖原位置上的元素。