HashSet实现

前面将了HashMap的实现,而HashSet则完全是使用了Has哈Map的存储,只是对外呈现只是Key列表集合的增加、删除等操作,而内部还是采用一个HashMap来存储数据。

        现在来看下add方法:

    public boolean add(E e) {
return map.put(e, PRESENT)==null;
    }

      这里其实就是讲这个元素e放置到map中,只是所有的元素对应的value都为同一个对象PRESENT(PRESENT是一个Object的实例)。

      

      然后来看下remove方法:

   public boolean remove(Object o) {
return map.remove(o)==PRESENT;
    }

      remove方法就是基于key从map中将这个元素移除掉,内部的思想可以参考HashMap里面的remove方法的思想。先通过hashCode得到Entry对象的位置,然后依托链表的next来进行遍历,最后找到对应的数据进行删除,如果没有找到对象,那么map.remove(o)就是一个null,而null==PRESEND的返回结果就是false。


    然后看下clear方法,完全调用map的clear方法。而对于map来说,clear只是将其size变为0,然后每一个Entry都设置为空,其实其Entry数组长度不会变化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值