Scala集合,Scala序列,Scala Seq,Array,ArrayBuffer,元组Tuple,列表,List,ListBuffer,队列QueueScala数组与JavaList的互转

1、Scala集合基本介绍

1.1  有关Scala集合的几个重点

  1. Scala同时支持不可变集合和可变集合,可变集合可以安全的并发访问。

  2. 两个主要的包:不可变集合:scala.collection.immutable。可变集合:scala.collection.mutable。

  3. Scala默认采用不可变集合,对于几乎所有的集合类,Scala都同时提供了可变和不可变的版本。

  4. Scala集合有三大类:序列Seq、集Set、映射Map,所有的集合都扩展自Iterable特质。

1.2 可变集合和不可变集合

  1. 不可变集合:Scala不可变集合,就是这个集合本身不能动态变化(类似Java数组,是不可以动态增长的)

  2. 可变集合:就是这个集合本身可以动态变化的(比如:ArrayList,是可以动态增长的)

1.3 不可变集合继承结构

 

1.4不可变集合的小结

  1. Set、Map是Java中也有的集合

  2. Seq是Java没有的,我们发现List归属到Seq了,因此这里的List就和java不是同 一个概念了

  3. 我们前面的 for 循环有一个 1 to 3 ,就是 IndexedSeq 下的 Vector 

  4. String 也是属于 IndexeSeq

  5. 大家注意 Scala 中的 Map 体系有一个 SortedMap,说明 Scala 的 Map 可以支持 排序

  6. 我们发现经典的数据结构比如 Queue 和 Stack 被归属到 LinearSeq

  7. IndexSeq 和 LinearSeq 的区别[IndexSeq 是通过索引来查找和定位,因此速度快,比如 String 就 是一个索引集合,通过索引即可定位] [LineaSeq 是线型的,即有头尾的概念,这种数据结构一般是通 过遍历来查找,它的价值在于应用到一些具体的应用场景 (电商网站, 大数据推荐系统 :最近浏览的 10 个商品)

1.5 可变集合的继承结构

1.6 对可变集合的说明

  1. 在可变集合中比不可变集合更加丰富。

  2. 在Seq集合中,增加了buffer类型,将来开发中常用的有ArrayBuffer和ListBuffer。

  3. 如果涉及到线程安全,可以选择使用syn开头的集合。

  4. 其他说明可以参考不可变集合。

2、数组

    这里的数组等同于Java中的数组,中括号的类型就是数组的范型。

2.1 定长数组

2.1.1 第一种方式定义数组   

//1. 创建了一个 Array 对象,

//2. [Int] 表示泛型,即该数组中,只能存放 Int 

//3. [Any] 表示 该数组可以存放任意类型

//4. 在没有赋值情况下,各个元素的值 0

//5. arr01(3) = 10 表示修改 第 4 个元素的值

val arr1 = new Array[Int](10) //

arr1.length

println("arr01(0)=" + arr01(0)) // 0 

//数据的遍历

for (i <- arr01) { 

    println(i)

println("--------------------“) 

arr01(3) = 10 //

for (i <- arr01) {

    println(i) 

}

2.1.2 第二种定义数组

package com.atguigu.chapter10

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”) 

        }

    } 

}

 

2.2 变长数组

2.2.1 基本使用

package com.atguigu.chapter10

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,1

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值