继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Scala(七)-①-数据结构-集合-Array和List和ListBuffer

慕虎7371278
关注TA
已关注
手记 1290
粉丝 203
获赞 874

Java中不可变集合

  • 不可变集合概念(java为例)

public class ImmutableDemo01ForJava {   public static void main(String[] args) {       // 1.不可变集合,内容可变,旦数组本身不能动态增长
       int []nums = new int[3];
       nums[2] = 2;       //  nums[3] = 1  错误

       // 2.可变集合,集合本省能够动态增长ArrayList arrayList = new ArrayList<String>();
       arrayList.add("t1");
       System.out.println(arrayList.hashCode());
       arrayList.add("t2");
       System.out.println(arrayList.hashCode());
   }
}

Scala中的集合

特点

  • Scala同时支持不可变集合可变集合,不可变集合可以安全的并发访问

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

  • Scala默认采用不可变集合,对于几乎所有的集合类,Scala都同时提供了可变(mutable)和不可变(immutable)的版本

  • Scala的集合有三大类:序列Seq集Set映射Map,所有的集合都扩展自Iterable特质,在Scala中集合有可变(mutable)和不可变(immutable)两种类型.

举个例子

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

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

不可变集合继承层次一栏图

webp

image.png

可变集合继承层次一栏图

webp

image.png

细节

  • Seq是Java中没有的,List归属于Seq.所以这里的List和Java不一样.

  • for循环里的1 to 3,就是基于IndexSeq下的Vector

  • String也是属于indexSeq

  • Queue和Stack归属于LinearSeq.即是线性的,有头有尾

  • IndexSeqLinearSeq.IndexSeq是基于索引的序列,LinearSeq是线性序列

① 数组

Why

Scala同时支持不可变集合可变集合.不可变集合是线程安全的.

  • 队列的应用场景
    推荐系统要用户最近浏览的10个商品.

How

  • 学习集合的创建、修改、删除、增加

定长数组-Array

创-方式一-new Array
/**
  * @author sweetcs
  */object ArrayDemo01 {  def main(args: Array[String]): Unit = {    // 默认为零
    var arr = new Array[Int](4)
    println("数组长度=" + arr.length)
    println("循环遍历数组:")    for (item <- arr) {
      println(item)
    }

    arr(3)=1
    
    println("循环遍历数组:")    for (item <- arr) {
      println(item)
    }

  }
}
创-方式二-Array
/**
  * @author sweetcs
  */object ArrayDemo02ForApply {  def main(args: Array[String]): Unit = {    // 数组元素的类型时Any.一旦定义就不可在更改
    var array = Array(1, 2, "beijing")    // 数组元素的类型时Int.一旦定义就不可在更改
    var arrayOfInts = Array(1,2)    for (item <- array) {
      println(item)
    }    // 传统for循环基于索引遍历
    var len = array.length    for (i <- 0 until len) {
      printf("%s\t", array(i))
    }
  }
}



作者:sixleaves
链接:https://www.jianshu.com/p/bdf90fc486ed


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP