(二十八)scala中的case class

28 阅读2分钟

复习:

  1. 集合,管理多个元素。容器,能装入多个东西!

  2. Set,自动去重。如果有重复的元素放入,它只保留一个!

  3. Map,元素都是键值对格式。42 -> 湖北,43 → 湖南key 不能重复!

  4. List,有序,链表。可以在不同的位置 添加,删除。元素之间在空间上并不连续

  5. case class。面向对象的内容。案例

  6. Array,有序,数组。元素之间在空间上是连续的。

Scala 中的一些数据结构Set,Set中是不能放入重复的元素的。

  • 例如
package caseclass

object classClass01 {
  // Set是可以去重的!
  // 创建一些对象,把他们放入Set,看看是否去重!
  class Stu(var name:String, var age:Int) {
    override def equals(obj: Any): Boolean = {
      val other = obj.asInstanceOf[Stu]
      other.age == age && other.name == name
    }

    override def toString: String = s"Stu(${name}, ${age})"
  }

  def main(args: Array[String]): Unit = {
    val stu1 = new Stu("小明", 18)
    val stu2 = new Stu("小明", 18)

    println(stu1)
    println(stu1 == stu2)

    val set1 = Set(stu1, stu2)
    println(set1)
  }
}

(一)case class的定义

case class 是 Scala 中一种特殊的类,它用于创建不可变的数据容器。

object ClassClass02 {

  case class Stu(name:String, age:Int)

  def main(args: Array[String]): Unit = {
    val stu1 = Stu("小明", 18)
    // 2. 默认情况下,属性都是只读的
    // stu1.age = 19
    // stu1.name = "xxx"

    val stu2 = Stu("小明", 18)

    println(stu1)
    println(stu1 == stu2)

    val set1 = Set(stu1, stu2)
    println(set1)
  }
}

注意

case class

  • 特殊的,和class写着的类,它有三点不同
    1. 在创建对象时,可以省略new
    1. 默认情况下,属性都是只读的
    1. 自动就给你添加如equals, toString等 方法。 特别适合用来做数据的。

(二)case class的特点

  1. 不可变性

case class 创建的对象是不可变的,一旦创建,其属性值不能被修改

  1. 实例化可以省略new

普通的class 在实例化时,必须要写new的。

  1. 自动重写方法: toString, equals, hashCode, copy

自动生成方法:

  1. to String方法

当我们定义一个 case class 时,Scala 会自动生成toString方法,它会返回一个包含类名和参数值的字符串表示。

  1. equals 和 hashCode 方法

equals和hashCode方法用于比较和哈希 case class 的实例。

  1. copy方法

copy方法可以用于创建一个与原实例相似的新实例,我们可以选择性地修改某些参数。