深入理解Scala中的集合

来源:互联网 发布:剑网三捏脸数据图 编辑:程序博客网 时间:2024/04/30 07:54

2016年10月9日08:41:29
1、简述声明List的3种方式
1>常见的声明方式:var list
2>::(2个冒号)+Nil的方式:val data2 = 10::(20::30::15::Nil)
3>与模式进行结合,通过这种方式可以很容易的获取到List集合中的内容或前几个元素
从整体结构上而言:Scala中的List其实只是由两部分构成:一部分是head部分,即Scala中的第一个元素; 一部分是tail部分,即List中除第一个元素以外的的其它元素的集合 。
2、简述LIst列表中常用的一阶函数
所谓一阶函数就是函数的参数不是函数,而是普通的变量;所谓高阶函数就是函数的参数是函数,此时认为函数是高阶函数。
常用的一阶函数:
tail:List集合中除第一个元素以外其他元素的集合
init:List集合中除最后一个元素以外其他元素的集合
:::含义:将多个List集合联合(组拼)起来,合成一个新的集合
take(n):获取List前n个元素的集合
drop(n):去除掉List前n个元素后剩下元素的集合
splitAt(n):将List集合拆分成若干个集合
head:返回List集合中的第一个元素
last:返回List集合中的最后一个元素
length:List集合中元素的个数(长度)
reverse:List集合中的元素进行反转
indices:取出List集合中所有元素对应的索引
zip:可以将多个集合进行拉链操作,所谓拉链操作就是配对操作
zipWithIndex:将List中的元素与索引进行配对构成新的集合
mkString:将List集合中的元素按照指定的格式进行输出,mkString方法在Spark中将数据进行格式化输出的时候非常有用
toIterator:返回能够遍历当前集合中所有元素的迭代器
toList:toList方法常与map、flatMap进行结合使用,toList作用在具体的字符串上面:可以将字符串的list集合变成字符的list集合:List[List[Char]] 。
用+=可以向集合当中添加具体的元素,用++=可以向集合当中添加具体的集合(List或者Array)。
3、简述List中的map、flatMap、foreach、filter的具体用法
1>map就是对集合中的所有元素执行一个具体的函数,将函数作用在数值上,并返回一个新的集合结果
2>flatMap:首先对List内部的每个成员进行map操作,然后在产生结果的基础上 进行flat–将map操作后的结果进行合并,产生合并之后的集合。
简单来说:flatMap首先执行map操作,然后对产生集合的结果进行合并,合并出一个新的集合结果
3>foreach:就是对集合中的每一个元素执行一个具体的函数,将函数作用在数值上,与map不同的是,foreach不产生具体的 结果,结果是Unit类型的。
4>filter:过滤出列表中符合条件的元素,filter结构中传进来的参数是一个结构为布尔类型的函数
4、简述List集合中常用的操作
partition:对集合中的元素按照某种条件进行分区
span:span的操作类似与partition,将集合分成不同的区域
find:找出集合中第一个满足条件的元素,返回值为Some或者None
takeWhile:获取集合当中所有满足条件的元素
dropWhile:获取集合当中满足条件以外的元素
forall:只有集合当中的所有元素都满足条件时才返回true,否则返回false
exists:只要集合当中存在一个元素满足条件就返回true
5、简述List中foldLeft、foldRight、sort函数的具体使用
1>foldLeft:函数体执行两元素操作从左到右, foldRight:函数体执行两元素操作从右到左。
2>scala中的sortWith排序算法的效率还是很高的,为线性。
6、简述List伴生对象中常用的方法
LIst本身是一个抽象类,抽象类不能定义出抽象类的实例对象,只能定义出抽象类的引用
List的object(伴生对象)中常用的方法:
1>apply:构造一个List实例对象
2>range:指定一个范围是左闭右开的List对象,同时可以指定两个元素之间的步长
3>zip:拉链操作、unzip:反拉链操作、将之前zip获得的集合结果进行反操作、生成两个List集合
4>flatten与concat:将List内部集合中的所有元素联合构成一个新的集合,即统一构成一个List
7、简述ListBuffer、ArrayBuffer、Queue、Stack数据结构的具体用法
ListBuffer、ArrayBuffer分别是List与Array的新版本,在ListBuffer、ArrayBuffer中可以对List与Array进行更加灵活、高效的操作
Queue(对列)与Stack(堆)是两种经典的数据结构。
8、简述Scala当中可变集合与不可变集合的概念
1>在scala当中,对于集合而言,一般有可变集合与不可变集合。所谓可变集合就是每次操作都是作用于原有集合之上, 所谓不可变集合就是集合本身是不可变的,对于不可变集合的每次操作都会产生一个新的集合。
2>默认情况下,scala鼓励我们使用不可变对象进行编程,因此在头文件中默认引入的都是不可变的类对象,因此如果我们需要mutable类型的类则需要引入相应的包 。
9、简述Set、Map、TreeSet、TreeMap存储数据的特点
对于Set和Map来说,元素放进去之后是没有顺序的,如果希望元素放进去之后是有顺序的,可以用treeSet和treeMap存储数据,因为凡是将类对象放到以Tree为内部存储结构的容器中,相应的类对象默认按照升序进行排序 。
10、简述List集合内部一些很重要的特性
1>List本身是一个抽象类,而抽象类不能定义出抽象类的实例对象,实际上我们使用的是List的Object伴生对象,即伴生对象的 apply方法来进行实例化的
2>List作为一个抽象类,其具体实现的子类是case object Nil与case class ::,其中Nil代表空的List、::代表非空的List
3>List这个抽象类被sealed关键字所修饰,而sealed关键字主要用在模式匹配中,因此List中的很多子类往往都是和模式匹配一起使用的
4>在List集合中,head、tail、isEmpty实际上是List中相应的方法,因此我们调用的实际上是方法,不是属性。

努力,奋斗!!!

0 0
原创粉丝点击