|
object ListTest {
def main(args:Array[String]){
// 列表 List
val list1 = List(1,2,3)
//列表本身不可变,有点像java的String,对某个列表调用方法时(比如 ::,似乎这个列表发生了改变,而实际上是用新的值重建了
//列表再返回而已。
val list2 = List(4,5,6,7)
val list3 = list1.::list2) //4 5 6 7 1 2 3
val list4 = list1 ::: list2 //1 2 3 4 5 6 7
list1.foreach(println) //1 2 3
list2.foreach(println) //4 5 6 7
list3.foreach(println)
list4.foreach(println)
//请注意上面list3和list4的值,通过实验可以发现list3和list4在添加List到原来的List的时候,添加的顺序是相反的。为什么会这样?
//scala中,如果方法是使用操作符,比如 a * b,其实可以写成a.*(b),但是如果方法是以:结尾,则:的右边操作数对:左边操作数进行
// 调用,比如 list1 ::: list2,则其实是list2.::list1),而list1:::list2的结果就是将list1添加在list2的前面
//上面是对List添加List,如果是List添加一个元素则用::
var lst = List(1,2,3,4,5)
lst = 10::lst //10::lst,此句中::表示一个方法,并且是lst的方法,而10是::方法的参数
lst.foreach(println(_))
var lst2 = List(1,2,3,4,5)
lst2 = lst2.:20) //20放在lst2的最前面了,也就是说lst2.:20)相当于20::lst2
// lst2 +: 30
lst2.foreach(println) //20 1 2 3 4 5
lst2 = 30 +: lst2 //列表中 +:和数组中+:一样,都是在lst2的前面添加一个元素
lst2.foreach(println(_)) //30 20 1 2 3 4 5
lst2 = lst ++: lst2 //列表中++:和数组中++:一样,都是在lst2的前面添加新一个列表
lst2.foreach(println)
}
}
|
|