HashSet集合的使用

HashSet特点

●基于HashCode计算元素存放位置。
●当存入元素的哈希码相同时,会调用equals进行确认,如结果为true,则拒绝后者存入。


存储结构:哈希表(数组+链表十红黑树)
存储过程(重复依据):
(1)根据hashcode计算保存的位置,如果此位置为空,则直接保存,如果不为空执行第二步。
(2)再执行equals方法,如果equals 方法为true.则认为是重复,否则,形成链表。

添加元素

        HashSet<Person> person=new HashSet();
        //添加元素
        Person p1=new Person("刘德华",22);
        Person p2=new Person("周润发",24);
        Person p3=new Person("梁朝伟",23);
        Person p4=new Person("林志玲",20);
        person.add(p1);
        person.add(p2);
        person.add(p3);
        person.add(p4);
        //重写equals方法和hashcode方法使得相同名字和年龄的对象不能重复添加
        person.add(new Person("梁朝伟",23));//无效添加,equals判断后与p3重复
        System.out.println("集合中的元素为:"+person.size());
        System.out.println(person.toString());

删除元素

        //删除元素
        //判断是否重复的依据是hashcode和equals方法
        person.remove(new Person("周润发",24));
        System.out.println("删除后元素个数:"+person.size());
        System.out.println(person.toString());

遍历集合元素

        //遍历集合元素
        //增强for循环
        for (Person person1 : person) {
            System.out.println(person1);
        }

        //迭代器
        Iterator it=person.iterator();
        while (it.hasNext()){
            System.out.println(it.next());
        }

判断

        //判断是否重复的依据是hashcode和equals方法
        System.out.println(person.contains(new Person("刘德华",22)));
        System.out.println(person.isEmpty());

此文中所用到的重写方法

    @Override
    public boolean equals(Object o) {
        if (this == o) //1.判断是否为同一个元素
            return true;
        if(o==null){//2.判断是否为空
            return false;
        }
        //3.判断是否为Person类型
        if(o instanceof Person){
            Person p=(Person) o;
            //4.比较属性
            if(this.name.equals(p.getName())&&this.age==p.getAge()){
                return true;
            }
        }
        //5.不满足条件则返回false
        return false;
    }

    @Override
    public int hashCode() {
        int n1=this.name.hashCode();
        int n2=this.age;
        return n1+n2;
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值