Scala set去重与case class

set去重:底层使用了hashMap进行去重,而hashMap判定元素是否相同时调用了hashcode,equals方法。

若在使用过程中使用set来装自定义类型并且想要达到去重的目的需要实现hashcode,equals方法

在使用中发现若用set装自定义的case class会自动实现去重,代码如下:

case class Name(name:String)
  def main(args: Array[String]): Unit = {
    val names = mutable.Set[String]()
    names += "lixin"
    names += "lixin"
    names.foreach(println)

    val nameObjects = mutable.Set[Name]()
    nameObjects += Name("lixin")
    nameObjects += Name("lixin")
    nameObjects += Name("lijing")
    nameObjects.foreach(println)

打印结果:

lixin
Name(lixin)
Name(lijing)

测试:

println(Name("lixin").equals(Name("lixin")))
    println(Name("lixin") == Name("lixin"))
    println(Name("lixin").hashCode())
    println(Name("lixin").hashCode())

打印结果:

true
true
1791894882
1791894882

结论:case class与字符串都能实现自动去重。

原理:

set调用hashcode,equals方法判断是否相同,case class默认实现了这两个方法所以能够去重;

参考:set去重原理hash map去重原理case class详解

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值