列表(List)
intList定义一个列表,intList.head返回列表头部,也就是第一个值,而intList.tail返回的是列表的尾部但返回值仍是一个列表
例如:
scala> val intList = List(1,2,3,4,5,6,7,8)
intList: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8)
scala> intList.head
res17: Int = 1
scala> intList.tail
res18: List[Int] = List(2, 3, 4, 5, 6, 7, 8)
列表的头部增加新的元素`运用 ::
scala> val intListOther = 0::intList
intListOther: List[Int] = List(0, 1, 2, 3, 4, 5, 6, 7, 8)
Nil表示空列表
scala> val intList = 1::2::3::Nil
intList: List[Int] = List(1, 2, 3)
利用 ::连接两个列表
scala> val intList = 1::2::3::Nil
intList: List[Int] = List(1, 2, 3)
scala> val intList1 = List(1,2)
intList1: List[Int] = List(1, 2)
scala> val intList2 = List(3,4)
intList2: List[Int] = List(3, 4)
scala> val intList3 = intList1:::intList2
intList3: List[Int] = List(1, 2, 3, 4)
利用intList.sum函数求和
scala> val b=List(3,4)
b: List[Int] = List(3, 4)
scala> b.sum
res4: Int = 7
集(set)
创建一个集合
scala> var mySet=Set("wuhan","yangtuo")
mySet: scala.collection.immutable.Set[String] = Set(wuhan, yangtuo)
向集合中添加元素
scala> mySet +="laosi"
scala> mySet
res6: scala.collection.immutable.Set[String] = Set(wuhan, yangtuo, laosi)
如果想在不可变val数据集中添加元素时是会出现报错的,所以需要声明为var,这时候我们需要调用 import scala.collection.mutable.Set包
例如:
向不可变数据集val中添加元素时是会出现报错
scala> val mySet=Set("wuhan","yangtuo")
mySet: scala.collection.immutable.Set[String] = Set(wuhan, yangtuo)
scala> mySet +="laosi"
<console>:20: error: value += is not a member of scala.collection.immutable.Set[String]
mySet +="laosi"
^
所以要声明为var才能添加进去
scala> import scala.collection.mutable.Set
import scala.collection.mutable.Set
scala> val mySet=Set("wuhan","yangtuo")
mySet: scala.collection.mutable.Set[String] = Set(wuhan, yangtuo)
scala> mySet +="laosi"
res11: mySet.type = Set(wuhan, laosi, yangtuo)
虽然可变集和不可变集都有添加或删除元素的操作,但是,二者有很大的区别。对不可变集进行操作,会产生一个新的集,原来的集并不会发生变化。 而对可变集进行操作,改变的是该集本身。
映射(Map)
映射(Map)是一系列键值对的集合,所有的值,都可以通过键来获取。
创建一个不可变映射
例如:
scala> val dashuju = Map("a" -> "wuhan", "b" -> "yangtuo","c"->"laosi")
dashuju: scala.collection.immutable.Map[String,String] = Map(a -> wuhan, b -> yangtuo, c -> laosi)
获取映射中的值
scala> println(dashuju("a"))
wuhan
使用contains方法查看映射中是否存在某个键
scala> val a=if(dashuju.contains("a")) dashuju("a") else 0
a: Any = wuhan
scala> val a=if(dashuju.contains("d")) dashuju("d") else 0
a: Any = 0
向不可变val映射中添加元素时是会出现报错,所以要声明为var才能添加进去
scala> import scala.collection.mutable.Map
import scala.collection.mutable.Map
scala> val dashuju = Map("a" -> "wuhan", "b" -> "yangtuo","c"->"laosi")
dashuju: scala.collection.mutable.Map[String,String] = Map(b -> yangtuo, a -> wuhan, c -> laosi)
scala> dashuju("d")="songjiahui"
也可以使用+=操作来添加新的元素
scala> dashuju +=("e"->"xinxin")
res1: dashuju.type = Map(e -> xinxin, b -> yangtuo, a -> wuhan, c -> laosi)
循环遍历映射
格式:for ((k,v) <- 映射) 语句块
利用printf 格式化循环输出
%d 十进制数字
%s 字符串
%c 字符
%e 指数浮点数
%f 浮点数
%i 整数(十进制)
%o 八进制
%u 无符号十进制
%x 十六进制
%% 打印%
% 打印%
例如:
\n表示换行
scala> for((k,v)<-dashuju)printf("xuehao: %s ximing: %s\n",k,v)
xuehao: e ximing: xinxin
xuehao: b ximing: yangtuo
xuehao: a ximing: wuhan
xuehao: c ximing: laosi
打印所有的键keys
scala> for((k,v)<-dashuju)printf("xuehao: %s ximing: %s\n",k,v)
xuehao: e ximing: xinxin
xuehao: b ximing: yangtuo
xuehao: a ximing: wuhan
xuehao: c ximing: laosi
scala> for(k<-dashuju.keys)println(k)
e
b
a
c
打印所有的值values
scala> for(k<-dashuju.values)println(k)
xinxin
yangtuo
wuhan
laosi
列表的遍历
for进行遍历:
val list = List(1, 2, 3, 4, 5)
for (elem <- list) println(elem)
foreach进行遍历:
val list = List(1, 2, 3, 4, 5)
list.foreach(elem => println(elem)) //可简写为list.foreach(println),或list foreach println