Scala的Set集合

复制代码
//设置一个Book。有三个属性:书名,作者,价格
class Book(var bookNmame:String,var author:String,var price:Double){}
object demo7 {
  def main(args: Array[String]): Unit = {
//    val set1 = Set(1,1,2,3,3)
//    println(set1)
    //创建可变S儿童,添加两本相同的书
    val set1 = scala.collection.mutable.Set[Book]()

    val book1 = new Book("西游记","吴承恩",100)
    val book2 = new Book("西游记","吴承恩",100)

    println(book1 == book2)

    set1 += book1
    set1 += book2

    //问题:Set可以把两本相同的书。做去重处理吗?
    set1.foreach(s =>{
      println(s.author)
    })
  }
}

//Set:特点去重
//设置一个Book。有三个属性:书名,作者,价格
class Book(var bookName:String,var author:String,var price:Double){
  override def equals(obj: Any): Boolean = {
    //判断依据是书名相同
    val o = obj.asInstanceOf[Book]
    o.bookName == bookName
  }

  override def toString: String = s"书名是:$bookName,作者:$author,价格:$price"

  override def hashCode(): Int = bookName.hashCode()
}
//case class 的特点
//1,数据是只读的
//2,可以省略new
//3,它内置实现了一些方法
//equals hashCode ,toString
case class BookCase(bookName:String,author:String,price:Double)

object demo8 {
  def main(args: Array[String]): Unit = {

    val book1 = new Book("a","a",1)
    val book11 = new Book("a","a",1)

    val set1 = Set(book1,book11)

    println(set1)

    val book2 = BookCase("a","a",1)
    val book3 = BookCase("a","a",1)

    println(book1 == book11)
    println(book2 == book3)

    println(book1)// println会自动去调用对象的toString方法
    println(book2)
  }
}

1:case class的定义语法是什么?

case class 类名(属性名:类型,属性名:类型)

2:case class的特点?

它的属性值不能被修改

可以不写new

内置了toString,equals,hashCode特别适用于来定义数据格式

相关推荐
captain3762 分钟前
Spring Web MVC(2)
java·前端·spring boot·后端·spring·mvc
紧跟先前的步伐3 分钟前
Go AI Agent 实战 17|模型适配层设计:让模型可替换
开发语言·人工智能·后端·ai·golang
小灰灰搞电子13 分钟前
Qt 中使用 QSettings 存储结构体数据详解
开发语言·qt
外收内放19 分钟前
FastAPI猜字谜实战(5):会话管理
开发语言·python·学习·fastapi
Ai-_Man19 分钟前
Microsoft Copilot对话数据怎么导入到另外一个Microsoft Copilot账号里去?AI导出鸭
开发语言·javascript·人工智能·microsoft·chatgpt·ecmascript·copilot
IT_陈寒24 分钟前
一文搞懂Java的核心概念
前端·人工智能·后端
H.莓飛25 分钟前
【数据结构】归并与外排序
linux·服务器·c语言·开发语言·数据结构·visual studio
技术老孙27 分钟前
给 Agent 装上对话框 —— AgentScope-Java 接入 Spring Boot 与 SSE 流式实战
java·开发语言·spring boot
铁皮饭盒27 分钟前
workbuddy和codebuddy免费送1000积分, 10秒钟搞定
前端·后端
计算机就业还在扩大1 小时前
第2期-cmp.Ordered+类型推断+刻意未支持的特性
后端·面试·golang