set

13 阅读1分钟
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"(${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)
  }
}
package caseclass

object classClass02 {
  /** case class 与普通的类,它有三点不同
   * 1、在创建对象时,可以省略 new
   * 2、默认情况下,属性都是只读的
   * 3、重写了自动添加hashCode,equals,toString 等方法
   *
   * 特别适合用来封装数据。
   **/
  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)
  }
}
package caseclass

    object classClass03 {
      // 1
      case class Book(id:String, bookName:String, author:String, price:Double)

      def main(args: Array[String]): Unit = {
        val book1 = Book("001", "高效能人士的七个习惯", "韦伯", 50)
        val book2 = Book("002", "沉思录", "皇帝", 20)
        val book3 = Book("003", "自控力", "xx", 30)
        // 2,3
        val bookList = scala.collection.mutable.ListBuffer(book1, book2, book3)
        val book4 = Book("004", "高效能人士的七个习惯", "韦伯", 50)
        // 4,5
        if(addNewBook(bookList, book4)) {
          println("添加成功")
        } else {
          println("图书已经存在,添加失败")
        }

        // 10
        bookList.foreach(ele => {
          println(s"书名: ${ele.bookName}")
          println(s"作者: ${ele.author}")
          println()
          })

  def addNewBook(bookList: scala.collection.mutable.ListBuffer[Book], book: Book): Boolean = {
    // 检查书是否存在
    if(bookList.exists(_.id  == book.id)) {
      false
    } else {
      bookList += book
      true
    }
  }
}