网易首页 > 网易号 > 正文 申请入驻

Scala数据结构和算法数组之

0
分享至

数组-定长数组(声明泛型)

第一种方式定义数组

  • 说明

这里的数组等同于 Java 中的数组,中括号的类型就是数组的类型 val arr1 = new Array[Int】(10)

//赋值,集合元素采用小括号访问

arr1(1) =7

  • 代码演示

package com.ldc
object ArrayDemo01 {
def main(args: Array[String]): Unit = {
//说明
// 1. 创建了一个 Array 对象,
// 2. [Int] 表示泛型,即该数组中,只能存放 Int
// 3. [Any】 表示 该数组可以存放任意类型
// 4. 在没有赋值情况下,各个元素的值 0
// 5. arr01(3) = 10 表示修改 第 4 个元素的值
val arr01 = new Array[Int](4) //底层 int[] arr01 = new int[4]
println(arr01·length) // 4
println("arr01(0)=" + arr01(0)) // 0
// 数据的遍历
for (i <- arr01) {
println(i)
}
println("--------------------")
arr01(3) = 10
for (i <- arr01) {
println(i)
}
}
}

第二种方式定义数组

  • 说明

在定义数组时,直接赋值 //使用 apply 方法创建数组对象 val arr1 = Array(1, 2)

  • 代码演示

package com.ldc
object ArrayDemo02 {
def main(args: Array[String]): Unit = {
//说明
// 1. 使用的是 object Array 的 apply
// 2. 直接初始化数组,这时因为你给了 整数和 “”, 这个数组的泛型就 Any
// 3. 遍历方式一样
var arr02 = Array(1, 3, "xx")
arr02(1) = "xx"
for (i <- arr02) {
println(i)
}
//可以使用我们传统的方式遍历,使用下标的方式遍历
for (index <- 0 until arr02·length) {
printf("arr02[%d]=%s", index, arr02(index) + "\t")
}
}
}

数组-变长数组(声明泛型)

  • 说明

//定义/声明 val arr2 = ArrayBufferInt//追加值/元素 arr2.append(7) //重新赋值 arr2(0) = 7

  • 代码演示

package com.ldc
import scala.collection.mutable.ArrayBuffer
object ArrayBufferDemo01 {
def main(args: Array[String]): Unit = {
//创建 ArrayBuffer
val arr01 = ArrayBuffer[Any](3, 2, 5)
//访问,查询//通过下标访问元素
println("arr01(1)=" + arr01(1)) // arr01(1) = 2
// 遍历
for (i <- arr01) {
println(i)
}
println(arr01·length) //3
println("arr01.hash=" + arr01.hashCode())
//修改 【修改值,动态增加】
//使用 append 追加数据 ,append 支持可变参数
//可以理解成 java 的数组的扩容
arr01.append(90·0, 13) // (3,2,5,90·0,13)
println("arr01.hash=" + arr01.hashCode())
println("===================")
arr01(1) = 89 /修改/ (3,89,5,90·0,13)
println("--------------------------")
for (i <- arr01) {
println(i)
}
//删除...
// 删除,是根据下标来说
arr01.remove(0) // (89,5,90·0,13)
println("--------删除后的元素遍历---------------")
for (i <- arr01) {
println(i)
}
println("最新的长度=" + arr01·length) // 4
}
}

变长数组分析总结

1) ArrayBuffer 是变长数组,类似 java 的 ArrayList

2) val arr2 = ArrayBufferInt 也是使用的 apply 方法构建对象

3) def append(elems: A*) { appendAll(elems) } 接收的是可变参数.

4) 每 append 一次,arr 在底层会重新分配空间,进行扩容,arr2 的内存地址会发生变化,也就成为新的 ArrayBuffer

定长数组与变长数组的转换

  • 说明

在开发中,我们可能使用对定长数组和变长数组,进行转换 arr1.toBuffer //定长数组转可变数组 arr2.toArray //可变数组转定长

  • 注意事项:

arr2.toArray 返回结果才是一个定长数组, arr2 本身没有变化 arr1.toBuffer 返回结果才是一个可变数组, arr1 本身没有

  • 演示代码

package com.ldc
import scala.collection.mutable.ArrayBuffer
object Array22ArrayBuffer {
def main(args: Array[String]): Unit = {
val arr2 = ArrayBuffer[Int]()
// 追加值
arr2.append(1, 2, 3)
println(arr2)
//说明
//1. arr2.toArray 调用 arr2 的方法 toArray
//2. ArrayBuffer ---> Array
//3. arr2 本身没有任何变化
val newArr = arr2.toArray
println(newArr)
//说明
//1. newArr.toBuffer 是把 Array->ArrayBuffer
//2. 底层的实现
/*
override def toBuffer[A1 >: A]: mutable.Buffer[A1] = {
val result = new mutable.ArrayBuffer[A1](size)
copyToBuffer(result)
result
}
*/
//3. newArr 本身没变化
val newArr2 = newArr.toBuffer
newArr2.append(123)
println(newArr2)
}
}

多维数组的定义和使用

  • 说明

//定义 val arr = Array.ofDimDouble//说明:二维数组中有三个一维数组,每个一维数组中有四个元素 //赋值 arr(1)(1) = 11.

  • 代码演示

package com.ldc
object MultiplyArray {
def main(args: Array[String]): Unit = {
//创建
val arr = Array.ofDim[Int](3, 4)
//遍历
for (item <- arr) { //取出二维数组的各个元素(一维数组)
for (item2 <- item) { // 元素(一维数组) 遍历
print(item2 + "\t")
}
println()
}
//指定取出
println(arr(1)(1)) // 0
//修改值
arr(1)(1) = 100
//遍历
println("=====================")
for (item <- arr) { //取出二维数组的各个元素(一维数组)
for (item2 <- item) { // 元素(一维数组) 遍历
print(item2 + "\t")
}
println()
}
//使用传统的下标的方式来进行遍历
println("===================")
for (i <- 0 to arr·length - 1) { //
for (j <- 0 to arr(i).length - 1) {
printf("arr[%d][%d]=%d\t", i, j, arr(i)(j))
}
println()
}
}
}

数组-Scala数组与Java的List的互转

Scala数组转Java的List

在项目开发中,有时我们需要将 Scala 数组转成 Java 数组,看下面案例

代码演示

package com.ldc
import scala.collection.mutable.ArrayBuffer
object ArrayBuffer2JavaList {
def main(args: Array[String]): Unit = {
// Scala 集合和 Java 集合互相转换
val arr = ArrayBuffer("1", "2", "3")
/*
implicit def bufferAsJavaList[A](b : scala.collection.mutable.Buffer[A]) : java.util.List[A] = {
/compiled code
*/
import scala.collection.JavaConversions.bufferAsJavaList
对象// ProcessBuilder , 因为 这里使用到上面的 bufferAsJavaList
val javaArr = new ProcessBuilder(arr) //为什么可以这样使用?
// 这里 arrList 就是 java 中的List
val arrList = javaArr.command()
println(arrList) /输出/ [1, 2, 3]
}
}

补充了一个多态(使用trait来实现的参数多态)的知识点

trait MyTrait01 {}
class A extends MyTrait01 {}
object B {
def test(m: MyTrait01): Unit = {
println("b ok..")
}
}
//明确一个知识点
// 当一个类继承了一个 trait
// 那么该类的实例,就可以传递给这个 trait 引用
val a01 = new A
B.test(a01)

Java的List转Scala数组(mutable·Buffer)

  • 代码如下

//java 的 List 转成 scala 的 ArrayBuffer
//说明
//1. asScalaBuffer 是一个隐式函数
/*
implicit def asScalaBuffer[A](l : java.util.List[A]) : scala.collection.mutable.Buffer[A] = { /* compiled
code */ }
*/
import scala.collection.JavaConversions.asScalaBuffer
import scala.collection.mutable
// java.util.List ==> Buffer
val scalaArr: mutable.Buffer[String] = arrList
scalaArr.append("jack")
scalaArr.append("tom")
scalaArr.remove(0)
println(scalaArr) // (2,3,jack,tom)

相关大数据开发技术知识:www.atguigu.com

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
美国大学室友:谷爱凌是我见过最聪明的人!她把LV项链借给我约会

美国大学室友:谷爱凌是我见过最聪明的人!她把LV项链借给我约会

念洲
2026-02-24 07:51:55
新春走基层|从塔克拉玛干到红其拉甫,28岁小伙为国门送上“年味”

新春走基层|从塔克拉玛干到红其拉甫,28岁小伙为国门送上“年味”

新华社
2026-02-23 19:51:13
字母招募布克曝光!邀请穿同队球衣:我会像斯图尔特那样为你拼命

字母招募布克曝光!邀请穿同队球衣:我会像斯图尔特那样为你拼命

罗说NBA
2026-02-24 06:46:01
TOP14位身高170以上的女神,有颜有灯有演技

TOP14位身高170以上的女神,有颜有灯有演技

素然追光
2026-01-02 02:45:02
Anthropic指控DeepSeek等中国AI大模型抄袭 遭马斯克贴脸开骂:贼喊捉贼 大规模窃秘数据

Anthropic指控DeepSeek等中国AI大模型抄袭 遭马斯克贴脸开骂:贼喊捉贼 大规模窃秘数据

快科技
2026-02-24 11:00:49
马刺击败东部第一,9连胜!文班21+17+4+6!一战彻底看清5个现实

马刺击败东部第一,9连胜!文班21+17+4+6!一战彻底看清5个现实

毒舌NBA
2026-02-24 11:00:58
善恶到头终有报?57岁央视女主持王小丫,已走上另一条大路

善恶到头终有报?57岁央视女主持王小丫,已走上另一条大路

妙知
2026-01-13 11:55:41
重要调规!佛山又一批片区规划有变!涉2大高铁站+多条旧村!

重要调规!佛山又一批片区规划有变!涉2大高铁站+多条旧村!

乐居好房
2026-02-24 09:06:49
教科书级别:比亚迪用“远程锁车”给全球贸易上了一课

教科书级别:比亚迪用“远程锁车”给全球贸易上了一课

音乐时光的娱乐
2026-02-24 10:00:41
美国评1979年中越战争:打了28天,中国军队出现了很多问题

美国评1979年中越战争:打了28天,中国军队出现了很多问题

小豫讲故事
2026-01-31 06:00:10
上海外滩一亚朵酒店突发火警 住客抱孩子在雨夜挨冻个把小时无人管

上海外滩一亚朵酒店突发火警 住客抱孩子在雨夜挨冻个把小时无人管

信网
2026-02-24 14:53:17
杜兰特愿出战28年奥运!暗示希望库里一起加入 美媒预测12人名单

杜兰特愿出战28年奥运!暗示希望库里一起加入 美媒预测12人名单

罗说NBA
2026-02-24 06:25:24
春节后开工首日 安徽一银行董事长落马被查

春节后开工首日 安徽一银行董事长落马被查

科技金融在线
2026-02-24 12:51:36
改变!仅用6场,曼联两项数据超越阿莫林,两大问题同时浮现

改变!仅用6场,曼联两项数据超越阿莫林,两大问题同时浮现

嗨皮看球
2026-02-24 12:45:54
库克豪掷6000亿美元!Mac mini开启美国制造模式:苹果供应链要变天

库克豪掷6000亿美元!Mac mini开启美国制造模式:苹果供应链要变天

快科技
2026-02-24 14:32:05
佛山里水一企业仓库起火,涉事员工被刑拘

佛山里水一企业仓库起火,涉事员工被刑拘

南方都市报
2026-02-23 22:22:14
52岁苏有朋泪崩:我不想再掩盖这个真相了!

52岁苏有朋泪崩:我不想再掩盖这个真相了!

妈咪OK
2026-01-04 14:25:55
OPPO陈希吐槽iPhone 17 Pro:日常卡顿数不胜数 完全不讲究了

OPPO陈希吐槽iPhone 17 Pro:日常卡顿数不胜数 完全不讲究了

快科技
2026-02-24 15:35:16
1968年黄克诚被轮番审讯,偷偷给林彪写了一封信:请你考虑一下

1968年黄克诚被轮番审讯,偷偷给林彪写了一封信:请你考虑一下

雍亲王府
2026-02-24 12:25:05
丰田史无前例新低!全新威兰达AIR版上市:13.78万起

丰田史无前例新低!全新威兰达AIR版上市:13.78万起

快科技
2026-02-24 11:21:07
2026-02-24 18:28:49
IT爱好者小尚
IT爱好者小尚
分享IT教育类信息
630文章数 55关注度
往期回顾 全部

科技要闻

AI颠覆发展最新牺牲品!IBM跳水重挫超13%

头条要闻

墨西哥头号毒枭毙命引全国性报复 度假胜地街头变火海

头条要闻

墨西哥头号毒枭毙命引全国性报复 度假胜地街头变火海

体育要闻

苏翊鸣总结米兰征程:我仍是那个热爱单板滑雪的少年

娱乐要闻

杨洋传遇上缅北剧组 开机就离开剧组?

财经要闻

县城消费「限时繁荣」了十天

汽车要闻

入门即满配 威兰达AIR版上市 13.78万元起

态度原创

本地
旅游
数码
时尚
军事航空

本地新闻

春花齐放2026:《骏马奔腾迎新岁》

旅游要闻

新春走基层丨在螺洲古镇偶遇本地“向导”

数码要闻

AI实战性能猛增!铠侠VE10 2TB PCIe 5.0 SSD测评

今年春天一定要拥有的针织,这样穿减龄又好看!

军事要闻

美军参联会主席警告:对伊朗动武可能带来重大风险

无障碍浏览 进入关怀版