无序不可重复的Set

                 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在添加元素的时候碰到重复的元素,就不再添加,而不是覆盖原位置上的元素。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值