(一)Array的定义
Array 是一种在 Scala 中用于存储固定大小、相同类型元素的数据结构。它在内存中是连续存储的,这使得访问元素的速度非常快。
类型有两种:Array表示长度不可变的数组 和 ArrayBuffer表示长度可变的数组
package array
/*
* Array 和 List 的区别
* Array:有序,数组:元素在空间上连续。通过下表去访问元素会特别快
* List:有序,链表:元素在空间上不连续
*
* 两种类型:可变,不可变
* 不可变:一个数组创建之后,不能添加,不能删除!
*
* 常用的方法:添加,删除,查找,循环,排序......
*/
object array01 {
def main(argss:Array[String]): Unit ={
//可变数组
val arr1 = scala.collection.mutable.ArrayBuffer(1,2,3);
//可以直接添加元素
arr1 += 4
println(arr1)
//不可变数组
val arr2 = Array(1,2,3)
//不可变,不能直接添加元素
//arr2 += 4 //报错
println(arr2)
}
}
(一)不可变数组
Array表示长度不可变的数组,一旦定义之后,不能再增加,删除元素。
我们主要学习它的一些常规操作:创建数组,访问元素,填充Array.range
package array
/*
* Array 和 List 的区别
* Array:有序,数组:元素在空间上连续。通过下表去访问元素会特别快
* List:有序,链表:元素在空间上不连续
*
* 两种类型:可变,不可变
* 不可变:一个数组创建之后,不能添加,不能删除!
*
* 常用的方法:添加,删除,查找,循环,排序......
*/
object array02 {
def main(argss:Array[String]): Unit ={
// Array(1,2,3)
// val arr = Array.range(1,100)
// arr.foreach(println)//1-99
// val arrr1 = Array.range(1,100,3) //3 步长
// arr1.foreach(println)//1-99
val arr1 = Array(1,2,3)
//访问数组元素
println(arr1(0)) //第一个元素
println(arr1(2)) //第三个元素
println(arr1(20)) //报错:数组越界! 第21个元素,java.lang.ArrayIndexOutOfBoundsException:
}
}
package array
/*
* Array 和 List 的区别
* Array:有序,数组:元素在空间上连续。通过下表去访问元素会特别快
* List:有序,链表:元素在空间上不连续
*
* 两种类型:可变,不可变
* 不可变:一个数组创建之后,不能添加,不能删除!
*
* 常用的方法:添加,删除,查找,循环,排序......
*/
object array03 {
def main(argss:Array[String]): Unit ={
//可变数组
val arr1 = scala.collection.mutable.ArrayBuffer(1,2,3)
//添加
arr1 += 4
arr1 += (5,6,7)
//删除
arr1 -= 4
//删除某个下标上的元素
//arr1.remove(0)
arr1.remove(0,3) // 从指定位置开始删除,删除几个?
//修改
arr1(2) = 200
//判断是否存在
println(arr1.contains(6)) //true
println(arr1.contains(8)) // false
println(arr1.sum)//求和
arr1.foreach(ele => println(ele))
}
}
* Array:有序,数组:元素在空间上连续。通过下表去访问元素会特别快
* List:有序,链表:元素在空间上不连续
*
* 两种类型:可变,不可变
* 不可变:一个数组创建之后,不能添加,不能删除!
*
* 常用的方法:添加,删除,查找,循环,排序......
*/
object array03 {
def main(argss:Array[String]): Unit ={
//可变数组
val arr1 = scala.collection.mutable.ArrayBuffer(1,2,0,-1,20,3)
//排序
val arr2 =arr1.sortWith((a,b)=>a>b)
//切片:只取整个数组中的某个部分 slice
val arr3 = arr1.filter(x => x >0)
//过滤
val arr4 = arr1.filter(x => x > 0)
//搜索位置:检查某个元素的下标
val target = -2
val result = arr1.indexOf(target) //如果没找到这个元素,就返回-1
println(s"${target}的下标是${result}")
arr4.foreach(ele => println(ele))
}
}
(四)、实训内容
任务背景:梦想清单管理。
1. 使用case class 定义DreamItem类。它的属性有:内容,是否完成,截止日期,优先级。
2. 定义可变Array来保存DreamItem。
3. 添加3个梦想
4. 将第2个梦想设置为已完成。
5. 调高第3个梦想的优先级
6. 根据优先级进行从高到低排序
7. 把优先级排名前5的梦想保存到一个新的列表中
8. 循环输出梦想列表