博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
scala编程第17章学习笔记(1)——集合类型
阅读量:7247 次
发布时间:2019-06-29

本文共 3863 字,大约阅读时间需要 12 分钟。

列表

列表的初始化及对其首尾的访问:

scala> val colors = List("red", "blue", "green")colors: List[String] = List(red, blue, green)scala> colors.headres15: String = redscala> colors.tailres16: List[String] = List(blue, green)

数组

创建长度已知但内容未知的数组:

scala> val fiveInts = new Array[Int](5)fiveInts: Array[Int] = Array(0, 0, 0, 0, 0)

根据已知元素初始化数组:

scala> val fiveToOne = Array(5, 4, 3, 2, 1)fiveToOne: Array[Int] = Array(5, 4, 3, 2, 1)

访问和更新数组元素:

scala> fiveInts(0) = fiveToOne(4)scala> fiveIntsres18: Array[Int] = Array(1, 0, 0, 0, 0)

列表缓存

ListBuffer是可变对象(包含在scala.collection.mutable包中),它可以更高效地通过添加元素的方式构建列表。ListBuffer能够支持常量时间的添加和前缀操作。元素的添加使用+=操作符,前缀使用+:操作符。完成之后,可以通过ListBuffer调用toList方法获得List。举例如下:

scala> val buf = new ListBuffer[Int]buf: scala.collection.mutable.ListBuffer[Int] = ListBuffer()scala> buf += 1res20: buf.type = ListBuffer(1)scala> buf += 2res21: buf.type = ListBuffer(1, 2)scala> bufres22: scala.collection.mutable.ListBuffer[Int] = ListBuffer(1, 2)scala> 3 +: bufres23: scala.collection.mutable.ListBuffer[Int] = ListBuffer(3, 1, 2)scala> buf.toListres24: List[Int] = List(1, 2)

数组缓存

ArrayBuffer与数组类似,只是额外还允许你在序列的开始或结束的地方添加和删除元素。所有的Array操作都被保留,只是由于实现中的包装层导致执行的稍微有些慢。

创建ArrayBuffer的时候,你必须指定它的类型参数,但可以不指定长度。ArrayBuffer可以自动调整分配的空间:

ArrayBuffer还能用+=操作添加元素:

scala> import scala.collection.mutable.ArrayBufferimport scala.collection.mutable.ArrayBufferscala> val buf = new ArrayBuffer[Int]()buf: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer()scala> buf += 12res27: buf.type = ArrayBuffer(12)scala> buf += 15res29: buf.type = ArrayBuffer(12, 15)

所有数组能使用的方法数组缓存都能用。如可以获得ArrayBuffer的长度,或通过索引访问元素:

scala> buf.lengthres30: Int = 2scala> buf(0)res31: Int = 12

队列

Scala的集合库提供了可变和不可变的Queue。以下方法创建空的不可变队列:

scala> import scala.collection.immutable.Queueimport scala.collection.immutable.Queuescala> val empty = Queue[Int]()empty: scala.collection.immutable.Queue[Int] = Queue()

可以使用enqueue为不可变队列添加元素:

scala> val has1 = empty.enqueue(1)has1: scala.collection.immutable.Queue[Int] = Queue(1)

如果要添加多个元素的话,可以把集合当作enqueue调用的参数:

scala> val has123 = has1.enqueue(List(2, 3))has123: scala.collection.immutable.Queue[Int] = Queue(1, 2, 3)

从队列的头部移除元素,可以使用dequeue:

scala> val (element, has23) = has123.dequeueelement: Int = 1has23: scala.collection.immutable.Queue[Int] = Queue(2, 3)

对于不可变队列来说,dequeue方法将返回由队列头部元素和移除该元素之后的剩余队列组成的对偶(Tuple2)。

可变队列的使用方式与不可变队列一样,只是代之以enqueue方法,可以使用+=及++=操作符添加元素。还有,对于可变队列来说,dequeue方法将只从队列移除头元素并返回。举例如下:

scala> import scala.collection.mutable.Queueimport scala.collection.mutable.Queuescala> val queue = Queue[String]()queue: scala.collection.mutable.Queue[String] = Queue()scala> queue += "a"res0: queue.type = Queue(a)scala> queue ++= List("b", "c")res1: queue.type = Queue(a, b, c)scala> queueres2: scala.collection.mutable.Queue[String] = Queue(a, b, c)scala> queue.dequeueres3: String = ascala> queueres4: scala.collection.mutable.Queue[String] = Queue(b, c)

Stack同样在Scala的集合库中有可变和不可变两个版本。元素的推入使用push,弹出使用pop,只获取栈顶的元素而不移除可以使用top。下面是使用可变栈的例子:

scala> import scala.collection.mutable.Stackimport scala.collection.mutable.Stackscala> val stack = new Stack[Int]stack: scala.collection.mutable.Stack[Int] = Stack()scala> stack.push(1)res5: stack.type = Stack(1)scala> stackres6: scala.collection.mutable.Stack[Int] = Stack(1)scala> stack.push(2)res7: stack.type = Stack(2, 1)scala> stackres8: scala.collection.mutable.Stack[Int] = Stack(2, 1)scala> stack.topres9: Int = 2scala> stackres10: scala.collection.mutable.Stack[Int] = Stack(2, 1)scala> stack.popres11: Int = 2scala> stackres12: scala.collection.mutable.Stack[Int] = Stack(1)

字符串(经RichString隐式转换)

RichString也是应该知道的序列,它的类型是Seq[Char]。因为Predef包含了从String到RichString的隐式转换,所以你可以把任何字符串当作Seq[Char]。举例如下:

scala> def hasUpperCase(s:String) = s.exists(_.isUpper)hasUpperCase: (s: String)Booleanscala> hasUpperCase("Robert Frost")res13: Boolean = truescala> hasUpperCase("e e cummings")res14: Boolean = false

 

转载地址:http://qunbm.baihongyu.com/

你可能感兴趣的文章
Android include使用
查看>>
三星收购哈曼,物联网领域又迎来一位玩家
查看>>
pssh批量ssh操作
查看>>
博为峰Java技术文章 ——JavaSE Swing 单选按钮II
查看>>
博为峰Java技术文章 ——JavaSE Swing 按钮组件的综合运用
查看>>
Python对象类型
查看>>
认识border
查看>>
关于LUN和存储卷的区别详解
查看>>
JavaSE 学习参考:IO流之字节流
查看>>
Spring集合的注入
查看>>
JavaSE 数组排序
查看>>
java多线程同代码函数
查看>>
php编程 - php分糖果问题
查看>>
我的友情链接
查看>>
某个方法到底应该放到哪个文件中
查看>>
【更新】Word控件Spire.Doc V6.0.63发布| 支持表格样式的应用
查看>>
磁盘IO
查看>>
经典DM×××实验
查看>>
IT行业——Linux
查看>>
Powershell-查询当前文件目录层级结构
查看>>