Scala深入学习之数组学习(一)

简介: 笔记

一、定长数组Array


数据的构建

  • 使用new关键字创建一 个定长数组
 //长度为30的整数数组,所有元素初始化为0
val array = new Array[Int] (30)
  • 直接使用Array创建 并初始化一个数组
//长度为2的Array【String】类型是推断出来的,所以就不需要new
val sArr = Array("Hello", "World")
  • 数组的赋值: 数组名(index) = 值
// 使用()而不是[]来访问元素
sArr(0) = "He1lo Tom"
  • 获取数组元素
// 数组名(index)
val result = sArr(1)

代码示例:

package arrayDemo
/**
 * @author : 蔡政洁
 * @email :caizhengjie888@icloud.com
 * @date : 2020/9/7
 * @time : 9:08 上午
 */
object ArrayDemo1 {
  /**
   * scala集合体系之定长数组的操作
   */
  def main(args: Array[String]): Unit = {
    // 创建int类型,长度为3的数组
    val array = new Array[Int](3)
    // 使用数组Array的半生对象来创建数组
    val strArr = Array[String]("java","python","hadoop")
    // crud
    // 获取数组指定索引的值
    println("index=1对应的数组的值:"+strArr(1))
    // 修改数组指定索引对应的值
    strArr(1) = "c"
    println("index=1对应的数组的值:"+strArr(1))
    // 判断
    if (strArr.contains("python")){
      println("python在数组里")
    }else{
      println("python不在数组里")
    }
    // 长度
    println("strArr.length == strArr.size? "+(strArr.length == strArr.size))
    // 遍历
    for (str <- strArr){
      println(str)
    }
  }
}

运行结果:

index=1对应的数组的值:python
index=1对应的数组的值:c
python不在数组里
strArr.length == strArr.size? true
java
c
hadoop



二、可变数组ArrayBuffer


1、对于那种长度按需要变化的数组,Java有ArrayList, C++有vector. Scala 中的等效数据结构为ArrayBuffer

2、ArrayBuffer是一种mutable的数据容器,相对于Array来说,最大的区别就是可以自由增删元素。当ArrayBuffer构建完毕后,还可以转换为immutable的Array容器.


代码示例:

package arrayDemo
import scala.collection.mutable.ArrayBuffer
/**
 * @author : 蔡政洁
 * @email :caizhengjie888@icloud.com
 * @date : 2020/9/7
 * @time : 10:36 上午
 */
object ArraBufferDemo {
  def main(args: Array[String]): Unit = {
    // 可变数组的构建
    val arraybuffer = new ArrayBuffer[Int](3) // 3是可变数组内部维护的定长数组的初始化长度,当达到这个阈值时,进行扩容
    var strArr = new ArrayBuffer[String]()
    // 使用ArrayBuffer的半生对象来创建对象,创建一个string的ArrayBuffer,有两个初始化元素
    strArr = ArrayBuffer[String]("hello","you")
    // crud
    println(arraybuffer)
    println("增加------------------")
    arraybuffer.append(1)
    println(arraybuffer)
    arraybuffer.append(2,3,4,5,6)
    println(arraybuffer)
    println("插入------------------")
    arraybuffer.insert(1,-1,8) // 在指定的索引位置上面插入n个y元素
    println(arraybuffer)
    println("获取------------------")
    println(arraybuffer(3)) // 获取指定索引位置的元素
    println("修改------------------")
    arraybuffer(4) = -4
    println(arraybuffer(4))
    println("remove删除------------------")
    println("删除前"+arraybuffer)
    val ret = arraybuffer.remove(2) // 删除并获取指定索引上的元素
    println("arraybuffer.remove(2):"+ret)
    println("删除后"+arraybuffer)
    // 删除多个元素
    arraybuffer.remove(1,3) // 从指定索引位置开始删除指定个数元素
    println("arraybuffer.remove(1,3):"+arraybuffer)
    println("drop删除------------------")
    val newAb = arraybuffer.drop(2) // 删除集合前n个元素,将剩余元素组成一个新的集合,而原集合不变
    println("arraybuffer.drop(2)之后的ab:"+arraybuffer)
    println("arraybuffer.drop(2)的返回值:"+newAb)
    println("判断------------------")
    if (arraybuffer.contains(4)){
      println("4在数组里")
    }else{
      println("-4不在数组里")
    }
    println("长度------------------")
    println("sarraybuffer.length == arraybuffer.size? "+(arraybuffer.length == arraybuffer.size))
  }
}

运行结果:

ArrayBuffer()
增加------------------
ArrayBuffer(1)
ArrayBuffer(1, 2, 3, 4, 5, 6)
插入------------------
ArrayBuffer(1, -1, 8, 2, 3, 4, 5, 6)
获取------------------
2
修改------------------
-4
remove删除------------------
删除前ArrayBuffer(1, -1, 8, 2, -4, 4, 5, 6)
arraybuffer.remove(2):8
删除后ArrayBuffer(1, -1, 2, -4, 4, 5, 6)
arraybuffer.remove(1,3):ArrayBuffer(1, 4, 5, 6)
drop删除------------------
arraybuffer.drop(2)之后的ab:ArrayBuffer(1, 4, 5, 6)
arraybuffer.drop(2)的返回值:ArrayBuffer(5, 6)
判断------------------
4在数组里
长度------------------
sarraybuffer.length == arraybuffer.size? true


三、变长数组通用操作

package arrayDemo
/**
 * @author : 蔡政洁
 * @email :caizhengjie888@icloud.com
 * @date : 2020/9/15
 * @time : 8:23 下午
 */
object ArrayCommonOps {
  // Scala数组通用操作
  def main(args: Array[String]): Unit = {
    // 使用数组的伴生对象创建了一个Array的实例
    var array = Array(1,2,3,4,5,6)
    // 定长数组转化为可变数组
    val ab = array.toBuffer
    println(ab)
    // 不定长数组转化为定长数组
    array = ab.toArray
    println(array)
    // maString 将数组/集合,转化为自定义格式的字符串
    println(array.mkString) // 就是将集合中的每一个元素拼接成字符串
    println(array.mkString(",")) // 就是将集合中的每一个元素按照分隔符拼接成字符串
    println(array.mkString("[",",","]")) // 就是将集合中的每一个元素按照分隔符拼接成字符串,同时添加起始和结束字符串
    // 普通遍历数组
    println("普通遍历数组")
    for(i <- ab){
      println(i)
    }
    // 高级数组遍历方式--foreach函数
    println("高级数组遍历方式--foreach函数")
    array.foreach(num => println(num))
    // 求和
    var sum = 0
    for(i <- ab){
      sum += i
    }
    println("sum:"+sum)
    println("sum:"+ab.sum)
    // 最大值
    var max = array(0)
    var min = array(0)
    for(i <- 1 until array.length){
      if(max < array(i)){
        max = array(i)
      }
      if(min > array(i)){
        min = array(i)
      }
    }
    println("数组array中的最大值"+max)
    println("数组array中的最小值"+min)
    // Scala中求数组的最大最小值
    println("数组array中的最大值"+array.max)
    println("数组array中的最小值"+array.min)
    // 从小到大排序
    var sortedArray = array.sorted
    println("排序之后的集合"+sortedArray.mkString(","))
    // 从大到小排序
    sortedArray = array.sortWith((v1,v2) => v1>v2)
    println("排序之后的集合"+sortedArray.mkString(","))
  }
}

运行结果:

ArrayBuffer(1, 2, 3, 4, 5, 6)
[I@96532d6
123456
1,2,3,4,5,6
[1,2,3,4,5,6]
普通遍历数组
1
2
3
4
5
6
高级数组遍历方式--foreach函数
1
2
3
4
5
6
sum:21
sum:21
数组array中的最大值6
数组array中的最小值1
数组array中的最大值6
数组array中的最小值1
排序之后的集合1,2,3,4,5,6
排序之后的集合6,5,4,3,



相关文章
|
7月前
|
算法 Scala
159 Scala数组
159 Scala数组
25 0
|
22天前
|
Scala 容器
Scala学习--day04--集合、常用方法、案例实操 - WordCount TopN、不同省份的商品点击排行
Scala学习--day04--集合、常用方法、案例实操 - WordCount TopN、不同省份的商品点击排行
|
22天前
|
消息中间件 分布式计算 大数据
Scala学习--day03--函数式编程
Scala学习--day03--函数式编程
|
22天前
|
Java Scala
Scala学习--day02---控制流、“九层妖塔—杨辉三角”
Scala学习--day02---控制流、“九层妖塔—杨辉三角”
|
22天前
|
Java 编译器 API
Scala学习--day01变量与数据类型、运算符
Scala学习--day01变量与数据类型、运算符
|
9月前
|
分布式计算 算法 Hadoop
Scala数组和元组
Scala数组和元组
64 0
|
Java 大数据 Scala
大数据开发基础的编程语言的Scala的字符串/数组/集合
Scala是一种基于JVM的编程语言,它支持丰富的字符串、数组和集合操作。本文将介绍Scala中这些数据类型的概念和用法,帮助开发者更好地理解和应用这门语言。
60 0
|
存储 算法 Java
Scala学习三-面向对象
前面我们已经学习了特质类似接口,其可以被继承,同时如果需要继承多个特质的话,则需要使用extends…with…进行继承。其类似java中的接口和抽象方法的结合体,但又比java中的其要强大,因为其可以定义抽象字段和普通字段、抽象方法和普通方法。而在java中接口中可以定义常量,不能定义变量。同时特质还可以继承class类,而在java中接口通常是用来实现的。 Object继承trait
121 0
Scala学习三-面向对象
|
Java Scala
Scala学习一
Scala中的方法与函数: 方法是属于类或者对象的,在运行时,它是加载到JVM的方法区中,而函数则是加载到JVM的堆内存中,同时可以将函数对象赋值给一个变量。函数是一个对象,继承自FunctionN,函数对象有apply、curried、toSting、tupled这些方法,而方法则没有。这是scala与java不同的地方。
82 0
Scala学习一