几种集合:
Array,ArrayBuffer\List,ListBuffer\Set,HashSet\Map,HashMap
Array
package com.doit.scala.Break01
object ArrayDemo1 {
def main(args: Array[String]): Unit = {
//定义一个通用数组 没有执行数据类型,可以存储任意类型
val arr1 = Array("Jim", 12, 12.22, true)
//指定泛型 约束数组中的数据类型 只能写泛型的子类
val arr2 = Array[Any]("Jim", 12, 12.22, true)
val arr3 = Array[Int](1, 2, 3, 4, 5)
val arr4 = Array[Int](1, 2, 3, 4, 5)
//数组的取值
println(arr1(3))
//数组元素重新赋值
arr3(0)=100
//数组的遍历
for(i <- arr3) println(i)
arr3.foreach(i=>println(i+""))
arr3.map(println(_))
//数组中的最大值
println(arr3.max)
//数组中的最小值
println(arr3.min)
//首个元素
println(arr3 .head)
//最后一个元素
println(arr3.last)
//取出首个元素的子数组
println(arr3.tail.toBuffer)
//将数组转成List集合
println(arr3.toList)
//求和
println(arr3.sum)
//默认排序
println(arr3.sorted.toBuffer)
//数组的长度
println(arr3.length)
//修改指定位置的元素
arr3.update(2,200)
//取出数组 前 几个元素
println(arr3.take(3).toBuffer)
//不可变数组后面添加一个元素
println(arr3.:+ (34).toBuffer)
//统计符合条件的个数
arr3.count(_>2)
}
}
List
package com.doit.scala.Break01
import scala.collection.mutable.ListBuffer
object ListDemo {
def main(args: Array[String]): Unit = {
//不可变List集合 数据不允许被修改
val ls1: List[Any] = List("sdf", 123, 12.34, true)
//向Nil空队列中添加元素组成新的队列
val ls2: List[String] = "Hive" :: "Mysql" :: "Spark" :: Nil //List(Hive, Mysql, Spark)
val value: Any = ls1 :+ "jkl" //List(sdf, 123, 12.34, true, jkl)
//Nil和List.empty[Nothing]是等价的
//获取指定位置元素
ls1(2)
//添加一个元素生成新的list
val ls3: List[Any] = ls1 :+ "Python"
//合并两个集合
val ls4: List[Any] = ls1 ++ ls2
//遍历list
ls4.foreach(println(_))
//获取前几位元素
ls4.take(3)
ls4.takeRight(2)
println(value)
val buffer1: ListBuffer[Any] = ListBuffer(1, 2, 3, 4, 5)
//添加一个非集合yong +=
buffer1 += 8
//添加一个元族
buffer1 += (45,56,67)//ListBuffer(1, 2, 3, 4, 5, 8, 45, 56, 67)
//添加一个集合 用++=
buffer1 ++= ls4 //ListBuffer(1, 2, 3, 4, 5, 8, 45, 56, 67, sdf, 123, 12.34, true, Hive, Mysql, Spark)
println(buffer1)
}
}
Set
package com.doit.scala.Break01
import scala.collection.mutable
object SetDemo {
def main(args: Array[String]): Unit = {
//Set和list的最大区别在于Set中不可以存储重复数据 ,通常使用Set来实现元素的去重!!
//Set集合也分为可变Set和不可变的Set,使用包名来区分可变和不可变
val set1: Set[Any] = Set(1, 23, 4, 5, 5, 6, 6, 7) //Set(5, 1, 6, 7, 23, 4)
//可变set
val set2 = new mutable.HashSet[Int]()
set2.add(12)
set2 += 13
set2 += (1,2,3,4,5,6,2348)
println(set2) //Set(12, 1, 13, 5, 2, 6, 3, 2348, 4) Set是无序的
set2.remove(1)
}
}
Map
package com.doit.scala.Break01
import scala.collection.mutable
import scala.collection.mutable.HashMap
object MapDemo {
def main(args: Array[String]): Unit = {
//不可变Map
val map1: Map[String, Int] = Map[String, Int](("n1", 1), ("n2", 2), ("n3", 3))
// 如果在一个map中 key是相通的 只会拿到最后写入的那个value
val m = Map("n4" -> 10, "n4" -> 11, "n4" -> 12)//Map(n4 -> 12)
val map2: mutable.HashMap[String, Int] = new mutable.HashMap[String, Int]()
map2.put("hl",1)
map2.put("zh",2)
map2.put("xl",3)
map2.put("eg",4)
//根据key获取元素,没有就给默认值
println(map2.getOrElse("hh",2))
//根据key更新数据 有就不做操作 没有就加上,后面的数
println(map2.getOrElseUpdate("hl",45))
println(map2.getOrElseUpdate("hh",43))
//删除key
map2.remove("")
println(map2.get("zh")) //Some(2)
//是否包含key
map2.contains("")
//返回迭代器
map2.keys
//返回Set 都是Key
println(map2.keySet)
println(map2)
}
}