Scala学习记录,List

List是一个不可变(immutable)的序列。特点:数据是有序的

前面学习的Set,Map数据是无序的;Array是有序的,Array数组物理空间上是连续的

List可变不可变:

list中不可变的列表是不能修改的

list可变列表是可以修改的,切记:前面要导包:

import scala.collection.mutable.ListBuffer

List常见操作

不可变列表常见操作:
可变列表常见操作:
Scala 复制代码
package Scala_CSDN
import scala.collection.mutable.ListBuffer
//list:有序的链表
//list分为可变的,不可变的(默认不可变)
object List1 {
 def main(args: Array[String]): Unit = {
      //1.建立,可变列表
      val l1 = ListBuffer("北京","上海")

      //2.通过下标来访问:下标从0开始
      println(l1(1))

      //3.能修改
      l1(1) = "杭州"
      println(l1)

      //4.添加
      l1 += "广州" //在尾部添加
      println(l1)
      l1.prepend("武汉") //在头部添加
      println(l1)
      //l1.insert(位置,值)
      l1.insert(2,"天津") //在第2个内容后添加
      println(l1)

      //5.删除
      l1 -= "广州" //删除指定元素
      println(l1)
      l1.remove(0) //删除指定位置的元素,0就是第一个元素
      println(l1)

      //6.合并
      val l2 = ListBuffer(1,2,3)
      val l3 = ListBuffer(4,5)
      val l4 = l2 ++ l3 //合并两个List的元素到一个新的List中

      //7.查找,判断元素是否存在
      val el = 3
      val rs = l4.contains(el)
      println(s"元素:$el 是否存在 ? $rs")

      //8.遍历 for foreach
      for(el <- l1){
        println(s": $el")
      }
      println("-"*20)
      l1.foreach(println)
        println (l4)
    }
}

运行结果:

小习一下:

1.在 Scala中,关于不可变 List 和可变 List 的说法错误的是?( B )

A. 可交的List 叫 ListBuffer; B. List的元素还是可以通过下标来修改的;

C. 使用ListBuffer 需要提前导入对于的包; D.默认的List 是不可变的

2.以下哪个方法可以用于向可变 List 的头部添加元素? ( A )

A. prepend B. insert C. pended D. prepended

3.使用 ::: 方法的作用是? ( B )

A.添加元素到可变列表; B.合并两个列表;

C.添加元素到不可变列表; D.合并两个列表中的元素,并消除重复的。

4.对于不可变 List,如果要添加新元素,会怎样? ( A )

A.直接添加; B. 抛出异常;

C.创建一个新的 List; D.编译错误

5.遍历 List 可以使用哪些方法? ( B )

A. for 循环和 while 循环; B. for 循环和 foreach 方法;

C. if 语句和 foreach 方法; D. switch 语句和 for 循环。

List实训内容:

1.创建图书信息类,包含三个属性:书名,作者,价格;

2.创建6本图书对象并添加到可变 List的尾部;

3.创建1本图书对象并添加到可变 List的头部;

4.创建1本图书对象并添加到可变 List的第3个位置;

5.根据图书名称查询是否在列表中(通过遍历列表对比名称);

6.从列表中删除第4本书;

7.对于图书按价格从高到低排序;

8.遍历图书列表,并打印每本书的详细信息;

9.展示全部的总的金额

Scala 复制代码
package Scala_CSDN
import scala.collection.mutable.ListBuffer
//1.创建图书信息类,包含三个属性:书名,作者,价格
class Book(var bookName: String, var author: String, var price: Double) {
  override def toString: String = s"书名:$bookName,作者:$author,价格:$price"
}
object 图书馆List{
  def main(args: Array[String]): Unit = {
    var bookList = ListBuffer[Book]()
    //2.创建6本图书对象并添加到可变 List的尾部
    bookList += new Book("百年孤独", "加西亚・马尔克斯", 50)
    bookList += new Book("活着", "余华", 80)
    bookList += new Book("哈利・波特", "J.K. 罗琳", 50)
    bookList += new Book("三体", "刘慈欣", 80)
    bookList += new Book("平凡的世界", "路遥", 70)
    bookList += new Book("追风筝的人", "卡勒德・胡赛尼", 60)
    println(bookList)
    //3.创建1本图书对象并添加到可变 List的头部
    bookList.prepend(new Book("呐喊", "鲁迅", 32))
    println(bookList)
    //4.创建1本图书对象并添加到可变 List的第3个位置
    bookList.insert(2, new Book("老人与海", "欧内斯特・海明威", 78))
    println(bookList)
    //5.根据图书名查询是否在列表中(通过遍历列表对比名称)
    def isBookInList(bookName: String): Boolean = {
      for (book <- bookList) {
        if (book.bookName == bookName) return true
      }
      false
    }
    println(s"《百年孤独》在列表中吗? ${isBookInList("百年孤独")}")
    //6.从列表中删除第四本书
    bookList.remove(3)
    println(bookList)
    //7.对图书按价格从高到低排序
    val sortedList = bookList.sortBy(-_.price)
    println("按价格从高到低排序后:")
    println(sortedList)
    //8.遍历图书列表,并打印每本书的详细信息
    println("每本书的详细信息:")
    for (book <- bookList) {
      println(s"书名:${book.bookName},作者:${book.author},价格:${book.price}")
    }
    //9.展示全部总金额
    val totalPrice = bookList.map(_.price).sum
    println(s"全部总金额为:$totalPrice")
  }
}

运行结果如下:

Scala 复制代码
"D:\Program Files\Java\jdk-10.0.1\bin\java.exe" "-javaagent:E:\新建文件夹\IntelliJ IDEA Community Edition 2023.3.1\lib\idea_rt.jar=60201:E:\新建文件夹\IntelliJ IDEA Community Edition 2023.3.1\bin" -Dfile.encoding=UTF-8 -classpath "E:\scala\scala\out\production\scala;C:\Program Files (x86)\scala\lib\scala-library.jar;C:\Program Files (x86)\scala\lib\scala-parser-combinators_2.12-1.0.7.jar;C:\Program Files (x86)\scala\lib\scala-reflect.jar;C:\Program Files (x86)\scala\lib\scala-swing_2.12-2.0.3.jar;C:\Program Files (x86)\scala\lib\scala-xml_2.12-1.0.6.jar" Scala_CSDN.图书馆List
ListBuffer(书名:百年孤独,作者:加西亚・马尔克斯,价格:50.0, 书名:活着,作者:余华,价格:80.0, 书名:哈利・波特,作者:J.K. 罗琳,价格:50.0, 书名:三体,作者:刘慈欣,价格:80.0, 书名:平凡的世界,作者:路遥,价格:70.0, 书名:追风筝的人,作者:卡勒德・胡赛尼,价格:60.0)
ListBuffer(书名:呐喊,作者:鲁迅,价格:32.0, 书名:百年孤独,作者:加西亚・马尔克斯,价格:50.0, 书名:活着,作者:余华,价格:80.0, 书名:哈利・波特,作者:J.K. 罗琳,价格:50.0, 书名:三体,作者:刘慈欣,价格:80.0, 书名:平凡的世界,作者:路遥,价格:70.0, 书名:追风筝的人,作者:卡勒德・胡赛尼,价格:60.0)
ListBuffer(书名:呐喊,作者:鲁迅,价格:32.0, 书名:百年孤独,作者:加西亚・马尔克斯,价格:50.0, 书名:老人与海,作者:欧内斯特・海明威,价格:78.0, 书名:活着,作者:余华,价格:80.0, 书名:哈利・波特,作者:J.K. 罗琳,价格:50.0, 书名:三体,作者:刘慈欣,价格:80.0, 书名:平凡的世界,作者:路遥,价格:70.0, 书名:追风筝的人,作者:卡勒德・胡赛尼,价格:60.0)
《百年孤独》在列表中吗? true
ListBuffer(书名:呐喊,作者:鲁迅,价格:32.0, 书名:百年孤独,作者:加西亚・马尔克斯,价格:50.0, 书名:老人与海,作者:欧内斯特・海明威,价格:78.0, 书名:哈利・波特,作者:J.K. 罗琳,价格:50.0, 书名:三体,作者:刘慈欣,价格:80.0, 书名:平凡的世界,作者:路遥,价格:70.0, 书名:追风筝的人,作者:卡勒德・胡赛尼,价格:60.0)
按价格从高到低排序后:
ListBuffer(书名:三体,作者:刘慈欣,价格:80.0, 书名:老人与海,作者:欧内斯特・海明威,价格:78.0, 书名:平凡的世界,作者:路遥,价格:70.0, 书名:追风筝的人,作者:卡勒德・胡赛尼,价格:60.0, 书名:百年孤独,作者:加西亚・马尔克斯,价格:50.0, 书名:哈利・波特,作者:J.K. 罗琳,价格:50.0, 书名:呐喊,作者:鲁迅,价格:32.0)
每本书的详细信息:
书名:呐喊,作者:鲁迅,价格:32.0
书名:百年孤独,作者:加西亚・马尔克斯,价格:50.0
书名:老人与海,作者:欧内斯特・海明威,价格:78.0
书名:哈利・波特,作者:J.K. 罗琳,价格:50.0
书名:三体,作者:刘慈欣,价格:80.0
书名:平凡的世界,作者:路遥,价格:70.0
书名:追风筝的人,作者:卡勒德・胡赛尼,价格:60.0
全部总金额为:420.0

进程已结束,退出代码为 0
相关推荐
西岸行者9 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意9 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码9 天前
嵌入式学习路线
学习
毛小茛9 天前
计算机系统概论——校验码
学习
babe小鑫9 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms9 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下9 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。9 天前
2026.2.25监控学习
学习
im_AMBER9 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J9 天前
从“Hello World“ 开始 C++
c语言·c++·学习