在上篇文章当中(
http://blog.youkuaiyun.com/poison_h/article/details/50456398
),我们学习了Scala中的Array,我想新大家对Scala有稍稍的认识了。如果你对大数据也感兴趣,我推荐你在自己的电脑上也搭建一个环境(
http://blog.youkuaiyun.com/poison_h/article/details/50454223
),动手敲一敲。这样手脑结合学习得更快,前面我尽量把文章写得足够详细,也很基础。后面会慢慢的深入!这样也不会让读者因为太难而失去兴趣。
好了,啰嗦了那么多,进入今天的学习当中。今天我将和大家一起学习Scala中List列表类。
当然你也可以定义一个空的List:
当然你也可以将两个list使用中缀操作符进行连接,如下:
此方法是返回列表的第一个元素。如下:
8、
在API文档中,有这样的描述:
A class for immutable linked lists representing ordered collections of elements of type.
This class comes with two implementing case classes scala.Nil
and scala.::
that implement the abstract members isEmpty
, head
and tail
.
This class is optimal for last-in-first-out (LIFO), stack-like access patterns. If you need another access pattern, for example, random access or FIFO, consider using a collection more suited to this than List
.
大概意思就是说:
一类元素有序不可变的链表集合。
这类自带两个实现类:Scala.Nil 和 Scala.:: 实现抽象类的成员都是isEmpty,头部和尾部。
它的最佳访问方式是后进先出(LIFO)模式,当然如果你需要其他访问模式。例如随机访问或者先进先出,考虑使用比List更好的集合。
注: “::”叫做中缀操作符,表示列表从前端扩展,遵循右结合。
列表定义:
定义一个元素类型为String的列表,如下:
val listA: List[String] = List("A", "B", "C", "D");还可以简写为:
val listB= List("A", "B", "C", "D");
所有的列表可以使用两种基本的构建模块来定义,一个无尾Nil和 ::。Nil代表了空列表
因此上面的还可以这样写:
val lsitF="A"::"B"::"C"::"D"::Nil
//scala.collection.immutable.Nil.type = List()列表常规操作:
val listC = Nil;
//List[Nothing] = List()
val listD = List();
1、中缀操作符(“::”)
在上面的介绍当中,你可能已经注意到这样一个“::”操作符号,那它具体是干嘛的呢?
“::”发音为cons,叫做中缀操作符,作用就是:把一个新元素组合到已有List的最前端,然后返回结果List。
如下:
val listE = 1 :: listB;
结果为:1 A B C D
val listE =listA :: listB;
结果为:List(A, B, C, D) A B C D
看到结果是不是很惊讶,是不是以为结果会是:A B C D A B C D,其实不然,在前面已经说过,中缀操作符是将一个新的元素组合到已有的list最前端,所以这儿listA也被视为一个元素而不是一个list。那如果我们要实现:
A B C D A B C D这样的效果呢?
2、::: 操作符的使用
要实现两个list的元素相加,我们可以使用 ":::" 操作符。如下:
val listE =listA ::: listB;
结果为:A B C D A B C D
当然其实还可以使用“++”,也能达到同样的效果,如下:
val listE =listA ++ listB;结果为:A B C D A B C D
3、head方法的使用
val listE = listA :: listB;
val listG = 1 :: listB;
listE结果为:List(A, B, C, D)
listG结果为:1
从ListE的结果可以证明上面的说法。
4、tail方法的使用
此方法返回一个由除了第一个元素外的所有元素的列表。如下:
val listH = listA.tail;
listH结果为:List(B, C, D)
5、isEmpty方法的使用
判断列表是否为空,如下:
if (listC.isEmpty) println("listC为空") else println("listC不为空")
结果为:listC为空
6、last方法的使用
取出最后一个元素,如下:
println("ListA最后一个元素为:" + listA.last);
ListA最后一个元素为:D
7、init方法的使用
删除最后一个元素,生成一个新的列表,如下:
val listI = listA.init;
listI列表为:List(A, B, C)
mkString方法的使用
产生一个指定形式的字符串。
这儿将ListA列表中的元素取出来,产生一个由“,”逗号分隔的字符串,如下:
println("字符串为:" + listA.mkString(","));
字符串为:A,B,C,D
mkString还有三个参数的定义:
def mkString(start: String, sep: String, end: String): String
分别是:开始字符串、分隔符、结束字符串。如下:
List(1, 2, 3).mkString("(", "; ", ")") = "(1; 2; 3)"
以下是重要的方法,可以在使用列表时。有关可用方法的完整列表,请Scala的官方文件。
SN | 方法及描述 |
---|---|
1 | def +(elem: A): List[A] 前置一个元素列表 |
2 | def ::(x: A): List[A] 在这个列表的开头添加的元素。 |
3 | def :::(prefix: List[A]): List[A] 增加了一个给定列表中该列表前面的元素。 |
4 | def ::(x: A): List[A] 增加了一个元素x在列表的开头 |
5 | def addString(b: StringBuilder): StringBuilder 追加列表的一个字符串生成器的所有元素。 |
6 | def addString(b: StringBuilder, sep: String): StringBuilder 追加列表的使用分隔字符串一个字符串生成器的所有元素。 |
7 | def apply(n: Int): A 选择通过其在列表中索引的元素 |
8 | def contains(elem: Any): Boolean 测试该列表中是否包含一个给定值作为元素。 |
9 | def copyToArray(xs: Array[A], start: Int, len: Int): Unit 列表的副本元件阵列。填充给定的数组xs与此列表中最多len个元素,在位置开始。 |
10 | def distinct: List[A] 建立从列表中没有任何重复的元素的新列表。 |
11 | def drop(n: Int): List[A] 返回除了第n个的所有元素。 |
12 | def dropRight(n: Int): List[A] 返回除了最后的n个的元素 |
13 | def dropWhile(p: (A) => Boolean): List[A] 丢弃满足谓词的元素最长前缀。 |
14 | def endsWith[B](that: Seq[B]): Boolean 测试列表是否使用给定序列结束。 |
15 | def equals(that: Any): Boolean equals方法的任意序列。比较该序列到某些其他对象。 |
16 | def exists(p: (A) => Boolean): Boolean 测试谓词是否持有一些列表的元素。 |
17 | def filter(p: (A) => Boolean): List[A] 返回列表满足谓词的所有元素。 |
18 | def forall(p: (A) => Boolean): Boolean 测试谓词是否持有该列表中的所有元素。 |
19 | def foreach(f: (A) => Unit): Unit 应用一个函数f以列表的所有元素。 |
20 | def head: A 选择列表的第一个元素 |
21 | def indexOf(elem: A, from: Int): Int 经过或在某些起始索引查找列表中的一些值第一次出现的索引。 |
22 | def init: List[A] 返回除了最后的所有元素 |
23 | def intersect(that: Seq[A]): List[A] 计算列表和另一序列之间的多重集交集。 |
24 | def isEmpty: Boolean 测试列表是否为空 |
25 | def iterator: Iterator[A] 创建一个新的迭代器中包含的可迭代对象中的所有元素 |
26 | def last: A 返回最后一个元素 |
27 | def lastIndexOf(elem: A, end: Int): Int 之前或在一个给定的最终指数查找的列表中的一些值最后一次出现的索引 |
28 | def length: Int 返回列表的长度 |
29 | def map[B](f: (A) => B): List[B] 通过应用函数以g这个列表中的所有元素构建一个新的集合 |
30 | def max: A 查找最大的元素 |
31 | def min: A 查找最小元素 |
32 | def mkString: String 显示列表的字符串中的所有元素 |
33 | def mkString(sep: String): String 显示的列表中的字符串中使用分隔串的所有元素 |
34 | def reverse: List[A] 返回新列表,在相反的顺序元素 |
35 | def sorted[B >: A]: List[A] 根据排序对列表进行排序 |
36 | def startsWith[B](that: Seq[B], offset: Int): Boolean 测试该列表中是否包含给定的索引处的给定的序列 |
37 | def sum: A 概括这个集合的元素 |
38 | def tail: List[A] 返回除了第一的所有元素 |
39 | def take(n: Int): List[A] 返回前n个元素 |
40 | def takeRight(n: Int): List[A] 返回最后n个元素 |
41 | def toArray: Array[A] 列表以一个数组变换 |
42 | def toBuffer[B >: A]: Buffer[B] 列表以一个可变缓冲器转换 |
43 | def toMap[T, U]: Map[T, U] 此列表的映射转换 |
44 | def toSeq: Seq[A] 列表的序列转换 |
45 | def toSet[B >: A]: Set[B] 列表到集合变换 |
46 | def toString(): String 列表转换为字符串 |
如果有什么不懂得或上文有错,请及时留言,以帮助更多人学习,谢谢大家!!!