Scala学习笔记--集合类型Queue,Set
补充知识:http://www.importnew.com/4543.html
正文开始
| scala.collection.immutable |
![]() |
| scala.collection.mutable |
![]() |
队列Queue
val emp = scala.collection.immutable.Queue[Int]();
val has1 = emp.enqueue(1)
val has123=has1.enqueue(List(2,3))
println(has1) //Queue(1)
println(has123) //Queue(1,2,3) val emp2 = scala.collection.mutable.Queue[Int]();
emp2.enqueue(1);
emp2.enqueue(2);
println(emp2.dequeue()); //1
使用集Set
使用集注意需要添加包
import scala.collection.mutable.Set
import scala.collection.immutable.Set
默认为不可变集
val test = "aa,bb,cc,dd..eee!ff";
//val t =test.split(",")
//println(t)
//t.foreach(x=>print(x+" ")) //把字符串分割成单词,用正则表达式[,!.]+可以完成功能:字符串可以在1到多个标点符号处分割开来
val wordArray = test.split("[,!.]+") //+号表示可以有多个标点符号
wordArray.foreach(x=>println(x))
集的常用操作
val nums = Set(1,2,3) //创建不可变集,(nums.toString,返回Set(1,2,3))
nums+5 //添加元素,返回Set(1,2,3,5)
nums-3 //删除元素,返回Set(1,2)
nums++List(5,6)//添加多个元素
nums--List(1,2)//删除多个元素
nums.size//返回元素大小
nums.contains(2)//返回元素是否包含2 import scala.collection.mutable//引入可变集合类型
val words = mutable.Set.empty[String]//创建空可变集合,(words.toString,返回Set())
words+="the"//添加元素,words.toString,返回Set(the)
words-="the"//删除元素,words.toString,返回Set()
words++=List("do","well","in")//添加多个元素 返回words.toString,返回Set(do,well,in)
words--=List("do","in")//删除多个元素
words.clear()//删除所有元素
使用映射
def countWords(text:String)={
/**
* 计算字符串的单词字数
*/
val counts = mutable.Map.empty[String,Int];
for(rawWord<-text.split("[ ,.!]+")){ //text.split返回一个字符串数组
val word = rawWord.toLowerCase()//变为小写
val oldCount =
if (counts.contains(word)) counts(word)
else 0
counts+=(word->(oldCount+1))
}
counts;
}
映射的常见操作
//常见的映射操作
val nums = Map("i"->1,"ii"->2); //创建不可变映射
val nums2 = nums +("vi"->6); //添加条目,返回一个映射赋值给nums2
val nums3 = nums -"ii"//删除条目,返回一个映射赋值给nums3
val nums22= nums++List("iii"->3,"iv"->4)//添加多个条目
val nums33 = nums--List("i","ii")//删除多个条目
nums.size//映射包含条目数量 nums.contains("ii")//检查是否包含 返回true
nums("ii")//获取指定键的关键值 返回2
var it1 =nums.keys //返回键枚举器, (返回字符串i、ii的Iterator)
//iterator 迭代器模式:提供一种方法访问一个容器对象中的各个元素,而不暴露该对象的细节
var it2 = nums.values//返回值枚举器(返回整数1、2的Iterator)
nums.keySet//返回键集Set(i,ii) import scala.collection.mutable
val words = mutable.Map.empty[String,Int]//创建空的可变映射
words+=("one"->1)//添加映射条目
words-="one"//删除条目
words++=List("one"->1,"two"->2)//添加多个条目
words--=List("one","two")//删除多个条目
默认的集和映射
/**
* scala.collection.immutable.Set()返回的类取决于你传递给它多少元素
* 默认的不可变映射实现
* scala.collection.immutable.EmptyMap
* scala.collection.immutable.Set1
* scala.collection.immutable.Set2
* scala.collection.immutable.Set3
* scala.collection.immutable.Set4
* scala.collection.immutable.HashSet
*/
有序的集和映射
有时,可能你需要集或映射的枚举器能够返回按特定顺序排列的元素,为此,Scala的集合库提供了
SortedSet和SortedMap特质,这两个特质分别由类TreeSet和TreeMap实现。
它们都使用了红黑树有序地保存元素或键。
import scala.collection.immutable.TreeSet
import scala.collection.immutable.TreeMap val ts = TreeSet(5,4,2,9,8,7,6,3,1)
println(ts)
val cs = TreeSet("f","u","n")
println(cs)
val tm = TreeMap(2->"two",1->"one",3->"three")
println(tm)
结果:
TreeSet(1, 2, 3, 4, 5, 6, 7, 8, 9)
TreeSet(f, n, u)
Map(1 -> one, 2 -> two, 3 -> three)
同步的集和映射
可变映射
//如果需要线程安全的映射,可以把SynchronizedMap特质混入到你想要的特定类实现中。
import scala.collection.mutable.{Map,SynchronizedMap,HashMap}
object MapMaker{
def makeMap:Map[String,String]={
//构造新的可变HashMap,并且混入了SynchronizedMap特质
new HashMap[String,String] with SynchronizedMap[String,String]{
//重载名为default的方法,方法将在查询不存在的键值时,返回英文字符串
//原来的default为抛出NoSuchElementException
override def default(key:String)={"Why do you want to know"}//返回一个value
}
}
}
//使用可变映射
val captial = MapMaker.makeMap
captial++=List("China"->"Beijing","US"->"Washington","Paris"->"France")
println(captial("China")) //输出Beijing
println(captial("New Zealand")) //输出Why do you want to know
可变集
val synchroSet = new mutable.HashSet[Int] with mutable.SynchronizedSet[Int]
Scala学习笔记--集合类型Queue,Set的更多相关文章
- Python学习笔记——集合类型
集合类型有两种不同的类型——可变集合(set)和不可变集合(frozenset) 可变集合不是可哈希的,不能用作字典的键,也不能用做其他集合中的元素 不可变集合是有哈希值的,能被用做字典的键或者是作为 ...
- scala学习笔记-集合
变长数组:数组缓冲 Scala中对于那种长度会变的数组的数据结构为ArrayBuffer. import scala.collection.mutable.ArrayBuffer; // 一个空的数组 ...
- Scala学习笔记(2)-类型注意
Scala类型注意事项: 1.Any是绝对的根,所有的其他可实例化类型均有AnyVal和AnyRef派生. 2.所有AnyVal的类型成为值类型(所有数值类型.char.Booble和Unit) 3. ...
- scala 学习笔记--集合
1.scala集合的null 是nil 而不是null 2.set的三个方法union,intersect,diff union--合并去重 intersect--交集 diff--a减去(a和b交集 ...
- Programming In Scala笔记-第十七章、Scala中的集合类型
本章主要介绍Scala中的集合类型,主要包括:Array, ListBuffer, Arraybuffer, Set, Map和Tuple. 一.序列 序列类型的对象中包含多个按顺序排列好的元素,可以 ...
- 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性
基于.net的分布式系统限流组件 在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...
- Scala学习笔记及与Java不同之处总结-从Java开发者角度
Scala与Java具有很多相似之处,但又有很多不同.这里主要从一个Java开发者的角度,总结在使用Scala的过程中所面临的一些思维转变. 这里仅仅是总结了部分两种语言在开发过程中的不同,以后会陆续 ...
- python3.4学习笔记(二) 类型判断,异常处理,终止程序
python3.4学习笔记(二) 类型判断,异常处理,终止程序,实例代码: #idle中按F5可以运行代码 #引入外部模块 import xxx #random模块,randint(开始数,结束数) ...
- 02-Swift学习笔记-元组类型
02-Swift学习笔记-元组类型 元组类型由N个任意类型的数据组成(N>=0) 元组类型的数据称为"元素" eg var size = (x:100 , y:100) si ...
随机推荐
- keil C语言与汇编语言混合编程
C与汇编混合编程主要有以下几种:(1)C语言中嵌入汇编(2)无参数传递的函数调用(3)有参数传递的函数调用 一.C语言中嵌入汇编 1.在 C 文件中要嵌入汇编代码片以如下方式加入汇编代码: #prag ...
- opencv视频跟踪2
在前面的报告中我们实现了用SURF算法计算目标在移动摄像机拍摄到的视频中的位置.由于摄像机本身像素的限制,加之算法处理时间会随着图像质量的提高而提高,实际实验发现在背景复杂的情况下,结果偏差可能会很大 ...
- poj 2229 Ultra-QuickSort(树状数组求逆序数)
题目链接:http://poj.org/problem?id=2299 题目大意:给定n个数,要求这些数构成的逆序对的个数. 可以采用归并排序,也可以使用树状数组 可以把数一个个插入到树状数组中, 每 ...
- NUnit - 使用感受
Nunit使用 最近项目开始大量使用Nunit, 发现Nunit还是有很多好处的. 1. 测试驱动逻辑,这样可以尽最大可能减少“修改”引入的Bug. 如果你修改了一些东西,导致Case跑不过.请检查你 ...
- php_mysql、php_mysqli 与 pdo_mysql 的区别与选择
php与mysql的连接有三种API接口,分别是:PHP的MySQL扩展 .PHP的mysqli扩展 .PHP数据对象(PDO) ,下面针对以上三种连接方式做下总结,以备在不同场景下选出最优方案. ...
- java基础 二分查找算法
/* * 折半查找法: * 思路: * 定义三个变量记录查找范围中最大.最小和中间的索引值,每次都是使用中间索引值与要查找的目标进行对比,如果不符合,那么就不停缩小查找范围 * */ ...
- Windows7 32位机上,OpenCV中配置GPU操作步骤
1. 查看本机配置,查看显卡类型是否支持NVIDIA GPU: 2. 从http://www.nvidia.cn/Download/index.aspx?lang=cn下载最新驱动并安装: 3. ...
- HOG(方向梯度直方图)
结合这周看的论文,我对这周研究的Histogram of oriented gradients(HOG)谈谈自己的理解: HOG descriptors 是应用在计算机视觉和图像处理领域,用于目标检測 ...
- Makefile学习(二)条件判断和内嵌函数
第七章:Makefile的条件执行 条件语句可是是两个不同的变量.或者变量和常量值的比较: 7.1例子: 对变量“CC”进行判断,其值如果是“gcc ”那么在程序连接时使用库“libgnu.so”或者 ...
- 利用JConsole工具监控java程序内存和JVM
一.找到java应用程序对应的进程PI 性能测试应用程序访问地址:http://192.168.29.218:7070/training/ 部署的应用服务器为tomcat6.028 启动tomcat服 ...

