Scala集合

集合概述


1. 元组Tuple

元组:可以存放各种相同或不同类型的数据,对数据没有过多的约束
:元组最大只能有22个元素

1.1 元组的创建

val t1 = (1,2,"aa",3)

val t2 = 1 -> "a"

val t3 = 3 -> "b" -> "king"  //((3,b),king)

1.2 元组的访问

访问元组中的数据,可以采用顺序号(_顺序号),也可以通过索引(productElement)访问。

object T1 {
    def main(args:Array[String]):Unit = {
        val t1 = (1,2,"a","b")
        println(t1._1)
        println(t1.productElement(0))
    }
}

1.3 元组的遍历

Tuple是一个整体,遍历需要调用其迭代器

var t1 = (1,"a","b",true)
//遍历元组
for( item <- t1.productIterator ){
    println( item )
}

2. 数组

2.1 定义数组(第一种方式)

此处的数组等同于Java中的数组,中括号的类型即为数组的类型 [从此可得,数组内元素类型必须相同]

val arr = new Array[Int](10)
//赋值,集合元素采用小括号访问
arr(1) = 6

2.2 定义数组(第二种方式)

//定义时,直接赋值;使用apply方法创建数组对象
val arr = Array(1,2,3)
###2.3 变长数组(声明泛型)

```scala
object CollTest {
  def main(args: Array[String]): Unit = {
    val arr01 = ArrayBuffer[Any](3, 2, 5)
    println("arr01(1)=" + arr01(1))
    for (i <- arr01) {
      println(i)
    }
    println(arr01.length)
    println("arr01.hash=" + arr01.hashCode()) //arr01.hash=110266112
    arr01.append(90.0,13)
    println("arr01.hash=" + arr01.hashCode()) //arr01.hash=-70025354
    arr01(1) = 89 //修改

    for (i <- arr01) {
      println(i)
    }
    arr01.remove(0)

    for (i <- arr01) {
      println(i)
    }
    println("最新的长度=" + arr01.length)  //4
  }
}
变长数据分析小结
  1. ArrayBuffer是变长数组,类似Java中的ArrayList
  2. val arr = ArrayBuffer[Int] () 也是使用apply方法构建对象
  3. def append(elem:A*) {appendAll(elems)} 接收的是可变参数
  4. 每次append,arr在底层会重新分配空间,进行扩容,arr的内存地址会发生变化,也就成为新的ArrayBuffer

2.4 定长数组与变长数组的转换

arr1.toBuffer  //定长数组转 可变数组
arr2.toArray   //可变数组转定长数组

2.5 Scala数组与Java的 list的互转【好像只限于元素类型为String】

   // Scala集合和Java集合互相转换
    val arr:ArrayBuffer[String] = ArrayBuffer("1", "2", "3")

    import scala.collection.JavaConversions.bufferAsJavaList
    val javaArr = new ProcessBuilder(arr)
    val arrList = javaArr.command()

    println(arrList)
posted @ 2019-11-15 23:50  qingfeng68  阅读(154)  评论(0)    收藏  举报