Scala集合【上】

简介: Scala集合【上】

简介

Scala的集合类型和Java差不多,也有三类:序列Seq(对应Java的LIst)、集合Set(对应Java的Set)、映射Map(对应Java的Map),他们都扩展了(with)Iterable 这个特质。

对于几乎所有的集合类, Scala 都同时提供了 可变 和 不可变 的版本,分别位于以下两

个包

import scala.collection.immutable.Seq

import scala.collection.mutable.Seq

      不可变集合,就是指该集合对象不可修改,每次修改就会返回一个新对象,而

不会对原对象进行修改。类似于 java 中的 String 对象。

       可变集合,就是这个集合可以直接对原对象进行修改,而不会返回新的对象。类似

于 java 中 StringBuilder 对象。

为什么要有可变和不可变这两种集合?

Scala之所以同时提供可变和不可变集合类型,是为了满足不同的编程需求和场景。

不可变集合类型在Scala中是默认的选择,它们具有以下优点:

  1. 线程安全:不可变集合是线程安全的,因为它们的内容在创建后不可更改。这使得在并发环境中使用不可变集合更加可靠和安全。
  2. 可重复使用:不可变集合可以在多个地方共享和重用。它们不会被意外的修改,从而减少了出错的可能性
  3. 简单和可预测:不可变集合的行为是可预测和稳定的,因为它们的内容不会发生变化。这有助于编写更容易理解和维护的代码。

然而,有时候我们需要在程序中进行修改和更新集合的操作。这时候可变集合类型就派上用场了,它们具有以下优点:

  1. 更高的性能:可变集合在插入、删除和更新元素时通常具有更高的性能,尤其是对于大型数据集合。
  2. 可变状态修改:在某些场景下,处理可变集合可以更直观和方便。例如,在迭代和逐步构建集合的过程中,可变集合提供了更灵活的操作方式。
  3. 与Java互操作性:与Java集合库相比,可变集合更易于对接和交互操作,因为它们更接近于Java中的集合类型。

1、数组

1.1 不可变数组 Array

1、定义数组

可指定数组类型或者不指定(默认类型Any,即数组可以存放任何数据类型的数据)

//1. 初始化数组
    var arr:Array[Int] = Array(1,2,3,4,5)
//2.在Scala中,默认的数组类型是Array[Any]  因此在不指定数组类型的时候可以存储任何数据类型
    val arr0 = Array(1,0.1,"hello",'c')
//3. 声明数组但不赋值
    val arr1 = new Array[Int](10)

2、改

//2.1 直接修改某个索引对应的值
    arr1(0) = 1
//2.2 修改指定索引的值
    arr1.update(0,2)

3、增

不可变数组在新增元素后返回一个新的数组。

//给数组新增加元素 5
    val arr2:Array[Int] = arr1 :+ 5

4、打印数组

//1.遍历数组打印
for(i <- arr)
      println(i)
//2.传递函数打印
arr.foreach(println)
//2.1 自定义函数做参数打印
def printItem(i: Int): Unit = print(i + " ")
arr.foreach(printItem)
//3.快捷打印
println(arr.mkString(","))

1.2 可变数组 ArrayBuffer

1、定义可变数组

//1.1 指定可变数组的数据类型
    val arr: ArrayBuffer[Int] = ArrayBuffer(1,2,3,5)
//1.2 不指定可变数组的数据类型
    val arr0 = ArrayBuffer(1,1.5,"scala",'w')
//1.3 只声明不初始化 需要指定类型但不需要指定长度
    val arr1 = new ArrayBuffer[Int]()

2、增

//2.增加元素
    arr0.append("spark")
    arr0.+=(5)

3、删

//5.删除元素
    arr0.remove(0)

4、改

//4.修改元素
    arr0(2) = 5

5、插入

//3.插入元素
    arr0.insert(3,"hbase")

1.3、可变数组和不可变数组的转换

1、可变数组 => 不可变数组

//可变数组转为不可变数组
val arr: ArrayBuffer[Int] = ArrayBuffer(1,2,3,5)
val new_arr = arr.toArray

2、不可变数组 => 可变数组

//不可变数组转为可变数组
    var arr:Array[Int] = Array(1,2,3,4,5)
    val new_arr = arr.toBuffer

1.4、多维数组

1、声明

//声明一个3x4的数组 即3个长度为4的一维数组
    val arr = Array.ofDim[Int](3,4)

2、打印多维数组

 for (i <- arr){
      for (j <- i){
        print(j + " ")
      }
      println()
    }

2、列表

Scala中的列表可以存放不同数据类型的数据 排序时安照字典序排序

2.1、不可变列表 List

List 是集合 Seq 下的一个集合类型,它默认是不可变集合。

1、声明创建一个List

//创建一个List
    val list: List[Int] = List(1,2,5,4,3)
//创建一个空List
    val emptyList: List[Int] = Nil
//可以存放不同数据类型的数据 排序时安照字典序排序
    val li = List("s",2,5,1.6)

2、在列表头部追加元素

   //在list头部追加数 0
    val ll = 0::list

3、在列表头部追加列表

    //将列表list1添加到list头部
    val list1:List[Int] = List(5,6,5)
    val l2 = list1:::list

4、打印列表

//1.
println(list.mkString(","))
//2.
list.foreach(println)

5、列表排序

    //返回一个排好序的List集合
    val sorted = list.sorted

2.2、可变列表 ListBuffer

1、创建一个可变集合

    val list0 = ListBuffer(1,2,5,4,8)
    //可以存放不同数据类型的数据 排序时安照字典序排序
    val list = ListBuffer(1,1.2,"s")
    //想要存放任意数据类型就设为 Any
    val buffer = ListBuffer.empty[Int]

2、向集合中添加数据

//添加数据
    buffer.append(5)
//指定位置插入数据
    buffer.insert(0,2)

3、打印集合

    println(buffer.mkString(","))
    buffer.foreach(println)

4、修改数据

buffer(0) = 6

5、删除数据

   //删除指定元素
    buffer.-=(5)
    //通过下标索引来删除元素
    buffer.remove(0)

3、Set 集合

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

       mutable.Set 默认是乱序的,如果想要有序可以用链式的LinedHashSet。

3.1、不可变 Set

    val set = Set(1,1,2,2,3,3)
    println(set.mkString(","))  //1,2,3

3.2、可变Set mutable.Set

声明集合

val set = mutable.Set(1,2,3,4,5,6)

删除指定元素

由于Set集合默认是无序的,所以也就没有通过下标删除元素的方法,它可以直接删除指定元素。

    //删除指定元素
    set-=(7)
    //删除指定元素
    set.remove(8)

打印集合

println(set)    //Set(1,5,2,6,3)
println(set.mkString(","))    //1,5,2,6,3,4


相关文章
|
Scala
162 Scala 集合
162 Scala 集合
43 0
|
6月前
|
分布式计算 Scala Spark
Scala【集合常用方法和函数操作(下)】
Scala【集合常用方法和函数操作(下)】
|
6月前
|
分布式计算 Scala Spark
Scala 【集合常用方法和函数操作-上】
Scala 【集合常用方法和函数操作-上】
|
5月前
|
Scala
scala-模式匹配(字符串、数组、元组、集合、类、偏函数)
scala-模式匹配(字符串、数组、元组、集合、类、偏函数)
27 0
|
6月前
|
Scala 容器
Scala学习--day04--集合、常用方法、案例实操 - WordCount TopN、不同省份的商品点击排行
Scala学习--day04--集合、常用方法、案例实操 - WordCount TopN、不同省份的商品点击排行
107 2
|
6月前
|
Scala
Scala综合练习_基于以下List集合实现词频统计
Scala综合练习_基于以下List集合实现词频统计
48 0
|
Scala 容器
Scala集合和遍历 2
Scala集合和遍历
73 0
|
Scala 索引
Scala集合和遍历 1
Scala集合和遍历
68 0
|
Java 大数据 Scala
大数据开发基础的编程语言的Scala的字符串/数组/集合
Scala是一种基于JVM的编程语言,它支持丰富的字符串、数组和集合操作。本文将介绍Scala中这些数据类型的概念和用法,帮助开发者更好地理解和应用这门语言。
80 0
Scala快速入门-11-常用集合操作
所有的集合都扩展自Iterable特质 集合有三大类,分别为序列、集和映射 几乎所有集合类,Scala都同时提供了可变和不可变的版本 Scala列表要么是空的,要么拥有一头一尾,其中尾部本身又是一个表列 集是无先后次序的集合 用LinkedHashSet来保留插入顺序,或用SortedSet来按顺序进行迭代 +将元素添加到无先后次序的集合中;+:和:+向前或向后追加到序列;++将两个集合串接在一起;-和--移除元素 映射、折叠和拉链操作是很有用的技巧,用来将函数和操作应用到集合中的元素