复习:
-
集合,管理多个元素。容器,能装入多个东西!
-
Set,自动去重。如果有重复的元素放入,它只保留一个!
-
Map,元素都是键值对格式。42 -> 湖北,43 → 湖南key 不能重复!
-
List,有序,链表。可以在不同的位置 添加,删除。元素之间在空间上并不连续
-
case class。面向对象的内容。案例
-
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写着的类,它有三点不同
-
- 在创建对象时,可以省略new
-
- 默认情况下,属性都是只读的
-
- 自动就给你添加如equals, toString等 方法。 特别适合用来做数据的。
(二)case class的特点
- 不可变性
case class 创建的对象是不可变的,一旦创建,其属性值不能被修改
- 实例化可以省略new
普通的class 在实例化时,必须要写new的。
- 自动重写方法: toString, equals, hashCode, copy
自动生成方法:
- to String方法
当我们定义一个 case class 时,Scala 会自动生成toString方法,它会返回一个包含类名和参数值的字符串表示。
- equals 和 hashCode 方法
equals和hashCode方法用于比较和哈希 case class 的实例。
- copy方法
copy方法可以用于创建一个与原实例相似的新实例,我们可以选择性地修改某些参数。