Scala学习笔记:02-Scala的数组与集合

数组

Scala 语言中提供的数组是用来存储固定大小的同类型元素。

数组声明

语法:
声明一个数组可以采用如下两种方式:

var arrayName: Array[String] = new Array[String](3);
var arrayName = Array("zhangsan","lisi","wangwu");

数组操作

  • 数组遍历
    var arrayName: Array[String] = new Array[String](3);
    for(i <- 0 until arrayName.length){
      arrayName(i) = i.toString;
      println(arrayName(i))
    }

  • 数组的长度:array.length
  • 合并两个数组
var newArray = arrayName ++ arrayName

var newArray = arrayName.concat(arrayName)
  • 查找元素所在位置,不存在返回-1
newArray.indexOf("zhangsan")
  • Array.range(start,end,step) 创建一个整形数组
    前闭后开
    var newArray = Array.range(1,5,2);
    for (item <- newArray){
      println(item)
    }

输出:1 3

  • Array.ofDim(n:Int) 创建一个指定长度的数组
    var newArray:Array[Int] = Array.ofDim(3)
    var newArray:Array[String] = Array.ofDim(3)
  • 多维数组 Array.ofDim[类型](n,n,n)
    var newArray = Array.ofDim[Int](3,3)
    for( i <- 0 until 3; j <- 0 until 3){
      newArray(i)(j) = i * j;
    }
    for (item <- newArray){
      for (it <- item){
        print(it)
      }
      println()
    }

集合(Collection)

import scala.collection.*

List 列表

Scala列表类似于数组,可以存放相同的元素,但是列表List是不可变的,值一旦定义了就不能改变。List的特征是其元素以线性方式存储,集合中可以存放重复对象。

构造列表

//使用List
var site: List[String] = List("zhangsan","lisi");

// 构造一个列表
var site2 = "zhangsan"::Nil

//空列表
var empty = Nil

列表的基本操作

  • head 返回列表的第一个元素
  • tail 返回一个列表,列表包含除第一个元素以外的其他元素
  • isEmpty 在列表为空时返回true
  • 连接列表 List.:::(List) 或者 List.concat(List)
  def main(args: Array[String]): Unit = {
    var site1: List[String] = List("zhangsan","lisi");

    var site2 = "zhangsan"::Nil

    var site3 = site1.:::(site2)
    println(site3)

    site3 = site1.concat(site2)
    println(site3)
  }
  • List.fill()
//重复3次的666
val site = List.fill(3)("666")
  • List.tabulate() 通过给定的函数创建列表
object TestSet {

  def test(a: Int): Int ={
    return a+a
  }

  def test_two(a:Int, b:Int): Int ={
    //二维列表需要两个输入参数,输入参数的值分别是二维数组的下标遍历
    return a+b
  }
  def main(args: Array[String]): Unit = {
    //使用普通函数
    var site4 = List.tabulate(3)(test)
    println(site4)

    //使用匿名函数
    var site5 = List.tabulate(5)(n => n*n)

    //二维列表
    var site6 = List.tabulate(3,3)(test_two)
    println(site6)
  }
}
  • List前面添加元素 ::
object TestSet {

  def test(a: Int): Int ={
    return a+a
  }

  def main(args: Array[String]): Unit = {
    //使用普通函数
    var site4:List[Int] = List.tabulate[Int](3)(test)
    val site3 = 2::Nil
    println(site3)
    
    // 头部添加元素
    val sit45 =  2 :: site4
    println(sit45)
    
    // 头部添加另一个列表的所有元素
    val site6 = site3 ::: site4 
  }
}
  • List头部添加另一个List的所有元素 :::
  • List.apply() 通过索引序号获取列表元素
  • List.max 最大值
  • List.min 最小值
  • List.toArray 转换为数组
  • List.toSet 转换成Set

Set 集合

Scala Set(集合)是没有重复的对象集合,所有的元素都是唯一的。

Scala 集合分为可变的和不可变的集合。

默认情况下,Scala 使用的是不可变集合,如果你想使用可变集合,需要引用 scala.collection.mutable.Set 包。

基本操作:

import scala.collection.mutable.Set;

object TestSet {

  def main(args: Array[String]): Unit = {
    val studentSet: Set[String] = Set("zhangsan","lisi","wangwu")

    //添加元素
    var ret: Boolean = false
    studentSet.add("666")
    //删除元素
    ret = studentSet.remove("666")

    //update,如果included参数为false,则会删除该元素,否则不做操作
    studentSet.update("lisi",true)

    //查找元素是否存在
    ret = studentSet.apply("777")

    //合并两个Set
    val studentSet2: Set[String] = Set("111","222","lisi")
    var studentSet3 = studentSet ++ studentSet2
    studentSet3 = studentSet.concat(studentSet2)

    //取交集
    studentSet3 = studentSet.&(studentSet2)
    studentSet3 = studentSet.intersect(studentSet2)

    //最大值,最小值
    val max = studentSet.max
    val min = studentSet.min

    //首个元素
    studentSet.head
    //除了第一个元素以外的所有的Set
    studentSet.tail
    //是否为空
    studentSet.isEmpty

    //addString 添加到字符串中
    var strBuilder: StringBuilder = new StringBuilder();
    studentSet.addString(strBuilder)
    println(strBuilder.toString())

  }
}

Map 映射

Map(映射)是一种可迭代的键值对(key/value)结构。

所有的值都可以通过键来获取。

Map 中的键都是唯一的。

Map 也叫哈希表(Hash tables)。

Map 有两种类型,可变与不可变,区别在于可变对象可以修改它,而不可变对象不可以。

默认情况下 Scala 使用不可变 Map。如果你需要使用可变集合,你需要显式的引入 import scala.collection.mutable.Map 类

在 Scala 中 你可以同时使用可变与不可变 Map,不可变的直接使用 Map,可变的使用 mutable.Map。

Map的基本操作

import scala.collection.mutable.Map

object TestMap {


  def main(args: Array[String]): Unit = {
    var studentMap: Map[String,Int] = Map()

    //插入
    studentMap.put("0001",1)
    studentMap.put("0002",2)
    studentMap += ("0003" -> 3)

    //获取
    var value = studentMap.apply("0001")
    value = studentMap("0001")
    var value2 = studentMap.get("0001").getOrElse(4)


    //修改值
    studentMap.update("0001",3)

    //删除一个键值对
    studentMap.remove("0001")

    //判断是否存在
    val flag = studentMap.contains("0002")
    println(flag)

    //合并两个Map
    var map2: Map[String,Int] = Map()
    map2.put("004",4)
    map2.put("005",5)

    var map3 = map2.concat(studentMap)
    map3 = map2 ++ studentMap
    map3 = map2.++(studentMap)
    println(map3)

    //循环遍历Map
    studentMap.keys.foreach{
      i =>
        print("keys = " + i)
        println(" Value = " + studentMap(i))
    }


    //keys,返回一个Set
    var keys = studentMap.keys
    println(keys)

    //values,返回一个Iterable
    var values = studentMap.values
    println(values)

    //判断是否为空
    studentMap.isEmpty

  }
}

Tuple 元组

与列表一样,元组也是不可变的,但与列表不同的是元组可以包含不同类型的元素。

元组的值是通过将单个的值包含在圆括号中构成的。

目前 Scala 支持的元组最大长度为 22。对于更大长度你可以使用集合,或者扩展元组。

Tuple的基本操作

object TestTuple{

  def main(args: Array[String]): Unit = {
    var t = (1,2,3,4,5,6,7,8,"9",10,11,12,13,14,15,16,17,18,19,20,21,22)
    println(t)

    //构建元组
    var t2 = new Tuple4("1",2,3,5);

    //访问元组
    println(t._1)
    println(t._2)

    //迭代元组
    t2.productIterator.foreach{
      i => println(i)
    }
  }
}

Option 选项

Scala Option(选项)类型用来表示一个值是可选的(有值或无值)。

Option[T] 是一个类型为 T 的可选值的容器: 如果值存在, Option[T] 就是一个 Some[T] ,如果不存在, Option[T] 就是对象 None 。

Option的基本操作

import scala.collection.mutable.Map

object TestOption {

  def main(args: Array[String]): Unit = {
    val name: Option[String] = Some("zhangsan")
    val name2: Option[String] = None

    println(name.get)
    println(name.getOrElse("zan"))

    //在Map中get返回,可以设定默认值
    val studentMap: Map[String,Int] = Map()
    studentMap.put("0001",1)
    studentMap.put("0002",2)
    studentMap.put("0004",3)
    studentMap.put("0005",5)

    val value = studentMap.get("0003")
    println(value.getOrElse(3))

  }
}

Iterator 迭代器

Scala Iterator(迭代器)不是一个集合,它是一种用于访问集合的方法。

迭代器 it 的两个基本操作是 next 和 hasNext。

调用 it.next() 会返回迭代器的下一个元素,并且更新迭代器的状态。

调用 it.hasNext() 用于检测集合中是否还有元素。

Iterator的基本操作

object Test {
   def main(args: Array[String]) {
      val it = Iterator("Baidu", "Google", "Runoob", "Taobao")
     
      while (it.hasNext){
         println(it.next())
      }
   }
}
  • 获取迭代器的长度 it.length 或者it.size
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值