在scala中数组分为不可变长数组(在immutable包下)和可变长数组(在mutable包下)

不可变长数组指的是长度不可变,但是数组中角标对应的元素的值是可变的

可变数组指的是长度和数组中角标对应的元素都是可变的。

object ArrayDemo {
def main(args: Array[String]): Unit = {
/**
* 不可变数组一旦初始化,数组的长度就是不可变的,不能往数组中添加任
* 何元素
*/
val arr = Array[Int](1, 2, 3, 4, 5) // 如果数组中,有不同类型的元素,那么这个数组的类型就是这些元素的公共父类型 Any
val arr1: Array[Any] = Array(1, 2, "leo") // 创建了一个数组,给数组的初始化长度为5,每个角标的初始长度和泛型的初始值一致,也就是 0
val arr2 = new Array[Int](5) // 创建一个数组,数组的长度是 1 ,数组的元素是 5
val arr3 = Array(5) // ++ 运算符合并两个数组,原来的数组并没有改变,只是生成了个新的数组。
val arr4 = arr ++ arr2 /**
* 可变长数组
*/
val buffer1 = ArrayBuffer[Int]()
buffer1 += 1
buffer1 ++= arr
buffer1 ++= ArrayBuffer(6, 7, 8) // 添加数组 // 更改指定角标的值
buffer1(1) = 11 // append 方式添加
buffer1.append(12, 13, 14)
buffer1 -= 12
println(buffer1) // ArrayBuffer(1, 11, 2, 3, 4, 5, 6, 7, 8, 13, 14) // 移除数组 如果要移除的元素不存在,不会报错
buffer1 --= Array(1, 2, 15)
println(buffer1) // ArrayBuffer(11, 3, 4, 5, 6, 7, 8, 13, 14) // 移除指定下表对应的元素
buffer1.remove(5) // 从指定角标开始移除指定个元素
buffer1.remove(3, 2)
}
}
 /**
* 数组的常用方法
*/
val arr = Array(1, 2, 3, 4, 5) // 最大值
println(arr.max)
// 最小值
println(arr.min)
//maString 拼接
println(arr.mkString("")) // 12345
println(arr.mkString(",")) // 1,2,3,4,5
println(arr.mkString("[", ",", "]")) //[1,2,3,4,5]
/**
* 数组的转换操作
*/
val intarr = Array(1,2,3,12,5,7) intarr.map((x: Int)=> x * 2)
.sortBy((x: Int)=> x) //排序
.reverse // 将数组反转
.foreach((x:Int)=>println(x)) intarr.map(_ * 2).sortBy(x =>x).reverse.foreach(println(_)) var strarr = Array("hello world","hello china")
strarr.map(x => {
val fields = x.split(" ")
fields
}).flatten.foreach(println(_)) strarr.flatMap((x: String)=>{x.split(" ")}).foreach(println(_))

相关:

1、foreach
foreach和map相似,只不过它没有返回值,foreach只要是为了对参数进行作用。 比如 names.foreach{name=>println(name)} 2、flatten
flatten可以把嵌套的结构展开. scala> List(List(1,2),List(3,4)).flatten
res0: List[Int] = List(1, 2, 3, 4) 3、flatmap
flatMap结合了map和flatten的功能。接收一个可以处理嵌套列表的函数,然后把返回结果连接起来。 scala> List(List(1,2),List(3,4)).flatMap(x=>x.map(x=>x*2))
res5: List[Int] = List(2, 4, 6, 8)

scala (4) 可变数组和不可变数组的更多相关文章

  1. 【转】不可变数组NSArray与可变数组NSMutableArray

    原文网址:http://www.jianshu.com/p/1ad327f56d1d 不可变数组NSArray //创建一个空数组 NSArray *array = [NSArray array]; ...

  2. OC基础 可变数组与不可变数组的使用

    OC基础 可变数组与不可变数组的使用 1.不可变数组 1.1不可变数组的创建 //实例方法 NSArray *array = [[NSArray alloc] initWithObjects:&quo ...

  3. Chapter5_初始化与清理_数组初始化与可变参数列表

    一.数组初始化 数组是相同类型的,用一个标识符名称封装到一起的一个对象序列或基本类型数据序列.编译器是不允许指定数组的长度的,当使用语句int[] a时,拥有的只是一个符号名,即一个数组的引用,并不拥 ...

  4. Java基础语法04面向对象上-类-属性-方法-可变参数-重载-递归-对象数组

    类 面向对象是一种思想,一般指将事务的属性与方法抽出总结为模板(类/class),处理事务时通过类创建/new出对象由对象的功能/方法去完成所要计算处理的事情. 面向过程:POP:以过程,步骤为主,考 ...

  5. [原创]Scala学习:数组的基本操作,数组进阶操作,多维数组

    1.Scala中提供了一种数据结构-数组,其中存储相同类型的元素的固定大小的连续集合.数组用于存储数据的集合,但它往往是更加有用认为数组作为相同类型的变量的集合 2 声明数组变量: 要使用的程序的数组 ...

  6. Scala进阶之路-高级数据类型之数组的使用

    Scala进阶之路-高级数据类型之数组的使用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数组的初始化方式 1>.长度不可变数组Array 注意:顾名思义,长度不可变数 ...

  7. scala可变var与不可变val的理解

    我们定义变量的时候分为var可变变量和val不可变变量. 我们使用容器的时候也分为可变容器和不可变容器. List和Tuple本身就是不可变的,set和map分为可变和不可变的,默认为不可变. 我们看 ...

  8. Scala 学习之路(四)—— 数组Array

    一.定长数组 在Scala中,如果你需要一个长度不变的数组,可以使用Array.但需要注意以下两点: 在Scala中使用(index)而不是[index]来访问数组中的元素,因为访问元素,对于Scal ...

  9. 快学Scala 第三课 (定长数组,变长数组, 数组循环, 数组转换, 数组常用操作)

    定长数组定义: val ar = new Array[Int](10) val arr = Array("aa", "bb") 定长数组赋值: arr(0) = ...

随机推荐

  1. hmac 算法模块

    Hmac算法:Keyed-Hashing for Message Authentication.它通过一个标准算法,在计算哈希的过程中,把key混入计算过程中 Python自带的hmac模块实现了标准 ...

  2. Mysql进阶-day3

    多实例介绍: mysql多实例就是一台服务器开启多个不同的服务端口(3306,3307),运行多个MySQL服务进程,这些服务进程通过不同的socket监听不同的服务端口来提供各自的服务端口. 这些m ...

  3. 请问在JAVA编程中什么叫耦合?什么又叫解藕? 悬赏分:0 - 解决时间:2008-3-8 12:55

    模块一的实现依赖于模块二,更改模块二后,模块一也得更改,那么二者就有耦合.修改程序,使得更改模块二后,模块一不受影响,那么就叫解藕 请问<java编程思想>中的“完全解藕”如何理解,和实现 ...

  4. System.Buffer 以字节数组(Byte[])操作基元类型数据

    1. Buffer.ByteLength:计算基元类型数组累计有多少字节组成. 该方法结果等于"基元类型字节长度 * 数组长度" , , }; , , }; , , }; Cons ...

  5. 安装批量装机工具cobbler过程

    首先想到的自然是yum install cobbler,结果找不到这个包,又懒得去官网下源码安装,于是乎想到增加第三方yum源,之后继续yum install cobbler,搞定. 然后启动cobb ...

  6. python接口测试:自动保存cookies

    接口测试中遇到上一个请求返回响应包含cookie(如下图登录请求的响应结果).需将cookies保存下来,后续请求自动带入,否则会提示未登录. python requests的cookie类型是< ...

  7. unittest:1 用例编写

    unittest是python自带的单元测试框架,包含测试用例case,测试集suite,测试集加载loader,测试执行runner,测试结果result等. 简单使用:写一个用例类继承自unitt ...

  8. angularJs的工具方法2

    一.angular.isArray     判断是否是数组 var a = []; console.log(angular.isArray(a)); //判断参数里面的是否是数组 二.angular. ...

  9. Java虚拟机10:Client模式和Server模式的区别

    部分商用虚拟机中,Java程序最初是通过解释器对.class文件进行解释执行的,当虚拟机发现某个方法或代码块运行地特别频繁的时候,就会把这些代码认定为热点代码Hot Spot Code(这也是我们使用 ...

  10. Spring+ehcache+redis两级缓存

    问题描述 场景:我们的应用系统是分布式集群的,可横向扩展的.应用中某个接口操作满足以下一个或多个条件: 1. 接口运行复杂代价大, 2. 接口返回数据量大, 3. 接口的数据基本不会更改, 4. 接口 ...