java中的HashSet类

一、HashSet类

实现了Set接口,无法存储重复元素

特点:元素位置无序、无索引、底层是HashMap

1、构造方法

内部是HashMap的构造方法

2、add方法

(1)元素在底层存储使用到了三种数据结构:hash数组、链表、树

(2)添加流程(根据hashcode值与hash数组长度取余计算出元素应该添加在hash数组的位置)

对于要添加的元素A,遍历集合,将A与集合中的每一个元素进行比较,如果两者的hash值不相等,则继续和下一个元素比较,否则使用equals方法比较两个元素的值是否相等,相等,则不将A添加到集合中,不相等,则继续和下一个元素比较,当和最后一个元素比较完成无异常情况时,将A添加到集合中

注:通话和重地两个词语的hashcode值相等但内容不同

(3)实现

(4)底层使用hashCode和equals,与单独使用equals相比,提高了效率,两者结合起来使用,也保证了安全

3、常用方法

4、hashCode和equals

Set集合中添加元素时调用的是元素类型中的hashCode和equals方法,如果没有,则会调用其父类中的方法

以String类为例,String类中重写了hashCode(使用内容生成hashcode值)和equals(比较内容是否相等),则可以在使用set集合添加String类型元素时不会将重复元素添加进去

如果使用自定义类,想要实现不包含内容上重复的元素,一定要重写hashCode和equals方法

Object类中的hashCode(这里面的东西哪去了???)和equals(比较的是对象的地址)

String类中的hashCode(使用内容生成hashcode码)和equals(通过内容进行比较)

--------------------------------------自定义一个类放入set集合------------------------------

未重写hashCode、equals、toString方法,会从父类中调用,会将内容重复的元素加到集合中

重写hashCode、equals、toString方法

实现只能将内容不重复的元素加入集合

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值