ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

第5章 Scala基本数据结构---ArrayBuffer

2021-09-28 11:02:42  阅读:170  来源: 互联网

标签:ab scala Int ArrayBuffer 元素 Scala --- Array


本文来自艾叔编著的《零基础快速入门Scala》免费电子书,添加文末艾叔微信,获取完整版的PDF电子书

5.2  ArrayBuffer

Array的大小在声明时就已经固定了,后续是无法改变的。如果Array的大小需要变化(主要是增大),可以使用ArrayBuffer。

1. 声明ArrayBuffer

例子代码如下,首先引入ArrayBuffer所需的package。

scala> import scala.collection.mutable.ArrayBuffer

声明一个ArrayBuffer,[Int]表示此数组元素的类型为Int,数组元素的个数为0。

scala> val ab = new ArrayBuffer[Int]()

2. ArrayBuffer添加元素

给数组ab添加元素,使用+=添加元素。

scala> ab += 1

res1: ab.type = ArrayBuffer(1)

再添加一个元素。

scala> ab += 2

res3: ab.type = ArrayBuffer(1, 2)

再添加一个元素。

scala> ab += 3

res4: ab.type = ArrayBuffer(1, 2, 3)

添加多个元素。

scala> ab += (4,5,6)

res6: ab.type = ArrayBuffer(1, 2, 3, 4, 5, 6)

3. ArrayBuffer移除元素

使用remove方法,可以移除ArrayBuffer中的元素,remove中传入要移除的index,index从0开始编号。

移除第4个元素,index是3。

res6: ab.type = ArrayBuffer(1, 2, 3, 4, 5, 6)

scala> ab.remove(3)

res7: Int = 4

验证。

scala> ab.foreach(println)

1

2

3

5

6

4. ArrayBuffer插入元素

使用inset,可以从指定的index开始,插入若干元素,inset定义如下。

def insert(n: Int,elems: Int*): Unit

n表示插入的位置,用index来表示,elems表示插入的元素,类型是Int,*表示可以插入多个元素。

例如,从index=3开始,插入3个元素,每个元素的值都是6。

scala> ab.insert(3, 6, 6, 6)

验证,第一个6所在的位置index就是3。

scala> ab.foreach(println)

1

2

3

6

6

6

5

6

5. ArrayBuffer和Array互相转换

ArrayBuffer转Array。

scala> val numsArray = ab.toArray

numsArray: Array[Int] = Array(1, 2, 3, 6, 6, 6, 5, 6)

ArrayBuffer转Array。

scala> val numsBuffer = numsArray.toBuffer

numsBuffer: scala.collection.mutable.Buffer[Int] = ArrayBuffer(1, 2, 3, 6, 6, 6, 5, 6)

6. 要注意的地方

  • 同Array一样,ArrayBuffer中的元素同样可以被修改;
  • Array中的map、filter、flatMap、reduce、排序等操作,对ArrayBuffer同样有效;
  • ArrayBuffer非常灵活,但是每次增加元素,都需要动态申请内存,这样会导致系统开销,操作不是很频繁的情况下,对性能不会有大的影响,但是,如果数据量大、操作频繁,则对性能会有大的影响,这种情况下,应想办法尽量提前确定数组大小,使用Array,性能会有显著改善。

加艾叔微信,加入Linux(Shell+Zabbix)、大数据(Spark+Hadoop)、云原生(Docker+Kubernetes)技术交流群

关注艾叔公众号,获取更多一手信息

标签:ab,scala,Int,ArrayBuffer,元素,Scala,---,Array
来源: https://blog.csdn.net/wenaideyu/article/details/120524920

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有