41_集合_List(链表)

说明
* 1. 链表的实现
分类
* 不可变List、可变List
可变&不可变的区别
* 不可变 : 链表初始化时,长度固定,不可修改
* 可变 : 链表长度可改变
复制代码
import scala.collection.mutable.ListBuffer

/**
  * @author gaocun
  * @create 2021-10-29 6:51 PM */
object List_02 {
  /*
  *  说明
  *     1. 链表的实现
  *  分类
  *     不可变List、可变List
  *  可变&不可变的区别
  *     不可变 : 链表初始化时,长度固定,不可修改
  *     可变  :  链表长度可改变
  * */

}

//不可变List
object ListTest extends App {
  //1. 初始化
  var list: List[Int] = List(1, 2, 3, 4)

  //2. 打印list
  println(list)
  println(list.mkString("--"))

  //3. 添加元素 (返回新对象,不会对原对象改变)
  //尾部添加
  var list1 = list.appended(5)
  println(list)
  println(list1)
  var list2 = list :+ 6 //底层调用appended方法
  println(list2)
  //头部添加
  var list3 = list.prepended(0)
  println(list3)
  var list4 = 5 +: list //底层调用prepended
  println(list4)
  var list5 = 0 :: list
  println(list5)
  println(list)

  //4. 获取指定位置的数
  println(list(0))
  println(list(1))
  //获取头部元素
  println(list.head)
  println(list.tail)

  //5. 遍历list
  list.foreach(println)
  for (e <- list) {
    println(e)
  }

}

//可变List
object ListBufferTest extends App {
  //初始化
  var list = ListBuffer(1, 2, 3, 4)

  //打印
  println(list)

  //添加元素 (修改自身对象)
  //头部添加
  0 +=: list // 底层调用prepend方法
  list.prepend(-1)
  println(list)
  //尾部添加
  list += 5 //底层调addOne方法
  list.append(6) //底层调addOne方法
  list.addOne(7)
  println(list)

  println("=====================")
  //添加元素 (不改变自身对象,返回新对象)
  //头部添加
  var list1 = list.prepended(0)
  println(list)
  println(list1)
  var list2 = -2 +: list // 底层调用prepended方法
  //尾部添加
  var list3 = list.appended(8)
  println(list3)

  println("======================")

  //删除元素 (改变对象自身)
  //指定索引删除,会报数组越界错误,返回被删除的元素
  println(list)
  println("根据元素位置删除 :" + list.remove(1))
  println(list += 99)
  //根据元素内容删除,返回删除后的对象指针
  println("根据元素内容删除 :" + (list -= 88))
  println(list)

  //获取头部元素
  println("获取head :" + list.head)
  //获取尾部元素
  println("获取tail :" + list.tail)
  println("获取size :" + list.size)
  println("获取length :" + list.length)

}
复制代码

 

posted @   学而不思则罔!  阅读(31)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界
点击右上角即可分享
微信分享提示