从0开始学Java,打卡第10天(20输出式学习计划)-5Set的主要实现类HashSet

Collection接口
|----List接口:存储有序的,可以重复的元素
|----ArrayList(主要的实现类)
|----LinkedList(对于频繁的插入、删除操作)
|----Vector(古老的实现类、线程安全的,但效率要低于ArrayList)
|----Set接口:存储无序的,不可重复的元素.Set中常用的方法都是Collection下定义的。
|----HashSet(主要实现类)
|----LinkedHashSet
|----TreeSet

set:存储的元素是无序的,不可重复的!
1.无序性,无序性!=随机性。真正的无序性,指的是元素在底层存储的位置是无序的。
2.不可重复性:当向set中添加进相同的元素的时候,后面的这个不能添加进去。

说明:要求添加进Set中的元素所在的类,一定要重写equals()和hashCode()方法。进而保证Set中元素的不可重复性。
代码左侧三角号代表重写overrides方法
仅存到List中,不用hashCode()方法,因为List中是连续的,就一个一个的存,Set是无序的,无序的就用到hashCode()方法。为什么Set要重写hashCode()方法呢:
Set中的元素是如何存储的呢?使用了哈希算法。(如果不用哈希算法,则存储第n个元素需要n-1次比较后才能判断是否存储。)
当向Set中添加对象时,首先调用此对象所在类的hashCode()方法,计算此对象的哈希值,此哈希值决定了此对象在Set中的存储位置。若此位置没有对象存储,则这个对象直接存到这个位置。若此位置已有对象存储,再通过equals()方法比较这两个对象是否相同。如果相同,后一个对象就不能再添加进来。如果返回false,则存储(尽量别这样设计hashCode()方法)。
要求:hashCode()方法要与equals()方法一致。直接调用系统自带的这两个方法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值