代理ip注册网站都通不过网站建设返回函数
news/
2025/9/26 4:15:30/
文章来源:
代理ip注册网站都通不过,网站建设返回函数,建设工程教育网 官网,天津seo公司网站Scala
集合
概述 集合本质上就是一个用于存储1个到多个数据的容器。在Scala中#xff0c;集合可以分为三大类#xff1a;Seq(序列)#xff0c;Set(集合)和Map(映射)。基于这三大类#xff0c;衍生出来众多的子类 序列#xff1a;元素有序可重复 集合#xff1a;元素无…Scala
集合
概述 集合本质上就是一个用于存储1个到多个数据的容器。在Scala中集合可以分为三大类Seq(序列)Set(集合)和Map(映射)。基于这三大类衍生出来众多的子类 序列元素有序可重复 集合元素无序不可重复 映射键值对结构数据 在Scala中所有的集合都混入了Iterable特质意味着所有的集合都可以被迭代遍历 Scala中的集合分为可变集合(scala.collection.mutable)和不可变集合(scala.collection.immutable) 所谓的不可变集合指的是集合被创建好之后长度不可变且其中的元素也不能改变。如果对不可变集合中的元素进行增删操作那么不会改变原集合而是会产生一个新的集合 所谓的可变集合指的是集合创建好之后依然可以对元素进行增删操作并且不会产生新集合而是修改原集合
数组
不可变数组(Array) 不可变数组定义好之后长度不能发生变化元素也不能增删如果增删元素那么会产生一个新的数组 定义方式 package com.fesco.array
object ArrayDemo {
def main(args: Array[String]): Unit {
// 不可变数组定义方式
// 方式一val 数组名:Array[元素类型] new Array[元素类型](数组长度)// 数组定义好之后每一个位置都会有默认值val arr: Array[Int] new Array[Int](5)arr(0) 3// 将数组转化为字符串println(arr.mkString(,))
// 方式二// int[] arr new int[]{3,4,1,4,5}val arr2: Array[Int] Array(3, 1, 7, 8, 4)println(arr2.mkString(,))
}
} 应用一 package com.fesco.array
object ArrayDemo2 {
def main(args: Array[String]): Unit {
// 不可变数组定义好之后长度不可变val arr Array(2, 4, 8, 7, 1, 5, 6)
// 应用一修改数组中元素的值// 方式一数组名(下标) 数据arr(3) 4// 方式二提供了update方法来修改元素数据arr.update(2, 5)
// 应用二遍历数组// 方式一转化为字符串val str arr.mkString(, )println(str)// 方式二通过下标来遍历for (i - 0 until arr.length) println(arr(i))// 方式三增强for循环// 增强for循环本质上就是在对元素进行迭代遍历for (i - arr) println(i)// 方式四迭代遍历val it arr.iteratorwhile (it.hasNext) println(it.next())// 方式五foreach方法arr.foreach(x println(x))// 顺次使用参数并且参数只使用了一次arr.foreach(println(_))// println(3,5, (x, y) x y)// println(3,5, _ _ )// 函数体只有一句并且使用了已经存在函数且参数是一一对应那么此时参数列表可以省略arr.foreach(println)
}
} 应用二 package com.fesco.array
object ArrayDemo3 {
def main(args: Array[String]): Unit {
val arr Array(2, 4, 8, 7, 1, 5, 6)
// 应用三数组扩容// Array类中提供了:和:的方式来对数组进行扩容本质上都是产生一个新的数组// : 在数组的末尾来新添元素构成一个新的数组val r1 arr : 3println(r1.mkString(, ))// : 在数组的头部来新添元素构成一个新的数组val r2 arr.:(3)println(r2.mkString(, ))val r3 3 : arrprintln(r3.mkString(, ))val r4 4 : arr : 3println(r4.mkString(, ))
// 应用四数组合并val nums1 Array(1, 2, 3, 4, 5)val nums2 Array(6, 7, 8, 9)// 方式一通过合并val v1 nums1 nums2println(v1.mkString(, ))// 方式二 : 或者 :// :等价于val v2 nums1 : nums2println(v2.mkString(, ))val v3 nums1 : nums2println(v3.mkString(, ))// 方式三concat函数val v4 nums1.concat(nums2)println(v4.mkString(, ))
}
} 应用三 package com.fesco.array
object ArrayDemo4 {
def main(args: Array[String]): Unit {
// 应用五创建连续范围的数组val r1 Array.range(1, 5)println(r1.mkString(, ))val r2 Array.range(0, 10, 2)println(r2.mkString(, ))
// 应用六用指定数据来填充数组// 创建数组数组的所有元素默认为10// 第一个()表示数组长度// 第二个()表示填充的元素val v1 Array.fill(5)(10)println(v1.mkString(, ))// 填充由100以内的随机数构成的长度为7的数组val v2 Array.fill(7)((Math.random() * 100).toInt)println(v2.mkString(, ))// ({})可以选择省略()或者{}val v3 Array.fill(7) {(Math.random() * 100).toInt}println(v3.mkString(, ))
// 应用七数组翻转val v4 v3.reverseprintln(v4.mkString(, ))
}
} 练习猴子报数。15只猴子围成一圈报数报到数字7的猴子被淘汰下一只猴子从1重新报数最后剩余的是哪只猴子 package com.fesco.array
object MonkeyExec {
def main(args: Array[String]): Unit {
// 定义数组表示15只猴子// 用true表示猴子的还活着用false表示猴子被淘汰val monkeys Array.fill(15)(true)// 定义变量来记录还剩余的猴子数量var n 15// 定义变量来记录报数var i 1// 定义变量来记录下标var index 0// 只要剩余的猴子数量1那么就需要继续报数while (n 1) {// 先判断这只猴子是否存活if (monkeys(index)) {// 判断这只猴子是否会被淘汰if (i 7) {// 这只猴子被淘汰monkeys(index) false// 剩余猴子数量-1n - 1// 下一只猴子重新报数i 0}// 报数1i 1}// 下一只猴子准备index 1if (index monkeys.length) index 0}println(monkeys.mkString(, ))}
}
可变数组(ArrayBuffer) 可变数组类似于Java中的ArrayList长度可以发生变化并且可以对数组中的元素来进行增删 定义格式 package com.fesco.array
import scala.collection.mutable.ArrayBuffer
object ArrayBufferDemo {
def main(args: Array[String]): Unit {
// 定义方式// 方式一创建了可变数组初始大小为0val r1 new ArrayBuffer[Int]r1.(5)r1 3println(r1)// 方式二创建可变数组指定初始大小val r2 new ArrayBuffer[Int](3)r2 4r2 2r2 5r2 7println(r2)// 方式三创建可变数组传入初始元素val r3 ArrayBuffer[Int](2, 7, 8, 9, 1)println(r3)
}
} 基本操作 package com.fesco.array
import scala.collection.mutable.ArrayBuffer
object ArrayBufferDemo2 {
def main(args: Array[String]): Unit {
val arr ArrayBuffer[Int](3, 4, 5, 6, 7)
// 在末尾添加元素arr.(8)arr 9arr.append(10)println(arr)// 在头部添加元素arr.prepend(2)println(arr)1 : arrprintln(arr)// 插入元素arr.insert(2, 11)println(arr)// 修改元素arr(0) 0println(arr)arr.update(1, 3)println(arr)// 删除指定下标上的元素arr.remove(0)println(arr)// 删除元素3// 删除指定的元素(第一次出现)arr - 3println(arr)// 遍历arr.foreach(println)
}
}
转换
package com.fesco.array
import scala.collection.mutable.ArrayBuffer
object ArrayTransformDemo {
def main(args: Array[String]): Unit {
// 可变数组 - 不可变数组val arrBuffer ArrayBuffer[Int](2, 3, 4, 5)val arr arrBuffer.toArrayprintln(arr)
// 不可变数组 - 可变数组val array Array[Int](1, 2, 3, 4, 5)val buffer array.toBufferprintln(buffer)
}
}
多维数组 定义格式 package com.fesco.array
object DimensionDemo {
def main(args: Array[String]): Unit {
// 定义格式
// 方式一// 定义二维数组r1包含了3个一维数组每一个一维数组的大小是不确定的val r1: Array[Array[Int]] new Array[Array[Int]](3)r1(0) new Array[Int](5)r1(1) Array[Int](1, 2, 3, 4)
// 方式二// 定义二维数组r2包含了2个一维数组val r2 Array(Array(1, 2, 3), Array(1, 3, 4, 6))println(r2(0)(1))
// 方式三// 通过ofDim函数来构建二维数组// 定义二维数组r3包含了3个一维数组每一个一维数组包含了5个元素val r3 Array.ofDim[Int](3, 5)r3(0)(0) 3println(r3(0)(0))
// 一维数组可以包含4个整数val r4 Array.ofDim[Int](4)// 三维数组包含了4个二维数组每一个二维数组中包含了3个一维数组每一个一维数组可以包含5个整数var r5 Array.ofDim[Int](4, 3, 5)// 四维数组包含了3个三维数组每一个三维数组中包含了4个二维数组每一个二维数组中包含了5个一维数组每一个一维数组可以有2个整数var r5 Array.ofDim[Int](3, 4, 5, 2)
}
} 如果每一个一维数组等大那么推荐使用第三种方式如果包含的一维数组不等大使用方式一如果已知元素那么使用方式二 ofDim支持多维数组一维~五维数组。Scala中不推荐超过5维的数组 练习输入一个数字n表示行数输出杨辉三角的前n行 package com.fesco.array
import scala.io.StdIn
object DimensionExec {
def main(args: Array[String]): Unit {
/*11 11 2 11 3 3 11 4 6 4 1...*/// 获取整数nval n StdIn.readInt()// 定义二维数组val arr new Array[Array[Int]](n)// 遍历数组for (i - 0 until n) {// 初始化第i行一维数组arr(i) new Array[Int](i 1)// 填充元素for (j - 0 to i) {// 每一行第一个或者最后一个元素是1if (j 0 || j i) arr(i)(j) 1else arr(i)(j) arr(i - 1)(j) arr(i - 1)(j - 1)}println(arr(i).mkString(\t))}
}
}
列表
不可变列表(List) 在Scala中通过List来定义不可变列表需要注意的是List本身是一个抽象类所以并不能直接使用List来构建对象需要使用它的伴生对象来构建 package com.fesco.list
import scala.::
object ListDemo {
def main(args: Array[String]): Unit {
// 方式一val list List[Int](2, 3, 4, 5, 6)println(list)val list2 List.apply(2, 3, 4, 5, 6)println(list2)
// 方式二// :: 在list之前来追加数据val list3 1 :: listprintln(list3)
// 方式三// Nil是List的子类表示一个空列表val list4 Nilprintln(list4)
// 方式四val list5 1 :: 2 :: 3 :: 4 :: Nilprintln(list5)}
} List被sealed修饰说明List是一个密封类那么就意味着List的子类必须和List处在同一个scala文件中即List无法直接扩展 基本操作 package com.fesco.list
object ListDemo2 {
def main(args: Array[String]): Unit {
val list List[Int](3, 4, 8, 1, 5, 9, 7)
// 获取指定下标位置上的元素// 底层实际上是调用了父特质LinearSeq中的apply函数println(list(2))// 等价于println(list.apply(2))// 获取第一个元素// println(list(0))// 等价于println(list.head)// 获取最后一个元素println(list.last)// 追加一个元素 - 产生一个新的列表// val r1 list : 6val r1 list.:(6)println(r1)// 在头部追加元素// 从右向左计算val r2 1 : list// val r2 list.:(1)// 当出现:的时候:对着谁就从谁开始计算// 如果两边都有:那么从右向左计算// 错误的写法list : 1println(r2)// 或者// val r3 list.::(1)val r3 1 :: list// list :: 1println(r3)// 构建了列表// 从右到左先构建空列表List()然后头部拆入5在插入4val r4 1 :: 2 :: 3 :: 4 :: 5 :: List()// 等价于val r5 1 :: 2 :: 3 :: 4 :: 5 :: Nilprintln(r4)println(r5)
}
} 列表的合并 package com.fesco.list
object ListDemo3 {
def main(args: Array[String]): Unit {
val list1 List[Int](1, 2, 3, 4)val list2 List[Int](5, 6, 7, 8)
// 合并列表val r1 list1 list2println(r1)val r2 list1 : list2println(r2)val r3 list1 : list2println(r3)val r4 list1.concat(list2)println(r4)val r5 list1 ::: list2println(r5)
}
}
可变列表(ListBuffer) Scala中通过ListBuffer来定义可变列表 package com.fesco.list
import scala.collection.mutable.ListBuffer
object ListBufferDemo {
def main(args: Array[String]): Unit {
// 方式一// 调用ListBuffer类的主构造器val buffer1 new ListBuffer[Int]()buffer1 4println(buffer1)// 方式二// 调用了ListBuffer伴生对象中的apply函数val buffer2 ListBuffer[Int](1, 2, 3, 4, 5)println(buffer2)
}
} 基本操作 package com.fesco.list
import scala.collection.mutable.ListBuffer
object ListBufferDemo2 {
def main(args: Array[String]): Unit {
val list ListBuffer[Int](1, 2, 3, 4, 5)
// 在尾部追加元素list 4list append 7println(list)// 在头部插入元素list prepend 0// list.:(2)2 : listprintln(list)// 在指定下标位置上插入元素list.insert(3, 6)println(list)// 修改指定位置上的元素list(2) 10list.update(3, 12)println(list)// 删除指定下标位置上的元素list.remove(0)println(list)// 删除指定的元素(第一个)list - 3println(list)
}
} 合并列表 package com.fesco.list
import scala.collection.mutable.ListBuffer
object ListBufferDemo3 {
def main(args: Array[String]): Unit {
val list1 ListBuffer[Int](1, 2, 3)val list2 ListBuffer[Int](4, 5, 6)
// 将list1和list2合并// 合并之后产生一个新的列表而不是修改原列表val r1 list1 list2println(r1)// 要求将list2中的数据合并到list1中list1 list2println(list1)// 获取list1中有而list3中没有的数据 - 差集val list3 ListBuffer[Int](1, 3, 5, 7)list1 -- list3println(list1)
}
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/917848.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!