Scala 常用数组集合简单总结
数组
Array-数组
//伴⽣对象创建数组
var a1=Array(1,2,3,5,4)
//创建⻓度为5的数组,所有值都是0
var a2=new Array[Int](5)
//获取⻓度
a1.length
a2.size
//修改
a1(1) = -1
a1.update(1,-2)
//遍历数组
for(i<- a1) println(i)
Range-区间
产生的是一个只读区间和数组类似,但是内容不可以修改。
//创建区间
var r1=new Range(0,10,3) //0 3 6 9
var r2=0.to(10).by(3)
var r3=0 until 10 by 3
//取值
r1(2) // 6
//r1(2) = 12 //错误
//遍历range
for(i<- r1) println(i)
//⻓度⼤⼩
r1.size
r1.length
Vector-坐标
//创建向量
var v1= Vector(1,2,3)
var v2= for(i <- 0 to 10 by 3) yield i
//取值
v1(0) //1
//不⽀持修改
//v1(2) = 12 //错误
//遍历Vector
for(i<- v1) println(i)
//⻓度⼤⼩
v1.size
v1.length
Iterator -游标
不可以根据下标读取,且只能遍历一次。
//创建⼀个游标
var it=Iterator(1,2,3)
//只可以被遍历⼀次
for(i<- it) println(i)
//计算⼤⼩.将集合清空
it.size
it.length
//判断是否为空
val flag= it.isEmpty
集合
List-不可变集合
//创建集合
var list=List(1,2,5,3,2)
//添加元素 产⽣新的集合数组,不会修改原始集合
list.::(10)
list.+:(11)
//追加新的集合元素 产⽣新的集合数组,不会修改原始集合
list.:::(List(7,8,9))
//删除n个元素 产⽣新的集合数组,不会修改原始集合
list.drop(3) //List(3, 2)
list.dropRight(3) //List(1, 2)
//删除符合条件的元素,匹配⼀个⽴即终⽌
list.dropWhile(item=> item < 5) // List(5, 3, 2)
//选择⼀个⼦集 从0开始到4不包含4 产⽣新的集合数组,不会修改原始集合
list.slice(0,4)
//前后翻转集合 产⽣新的集合数组,不会修改原始集合
list.reverse // List(2, 3, 5, 2, 1)
//去除重复 产⽣新的集合数组,不会修改原始集合
list.distinct // List(1, 2, 5, 3)
//获取前n个元素 产⽣新的集合数组,不会修改原始集合
list.take(3) //List(1, 2, 5)
list.takeRight(3) //List(5, 3, 2)
//⼀直拿,直到第⼀个不满⾜条件终⽌ 产⽣新的集合数组,不会修改原始集合
list.takeWhile(item => item < 5 ) //List(1, 2)
//获取第⼀个元素、最后⼀个元素、除第⼀个以外的所有元素
list.head
list.last
list.tail
//获取数组⼤⼩
list.size
list.length
//获取数组指定位置的元素
list(2) // 5
ListBuffer-可变集合
//创建集合
var list=ListBuffer(1,2,5,3,2)
//添加元素 产⽣新的集合数组,不会修改原始集合
list.+:(11) //ListBuffer(1, 2, 5, 3, 2, 11)
//添加元素 产⽣新的集合数组,修改原始集合
list.+=(-1) // ListBuffer(1, 2, 5, 3, 2, -1)
list.+=:(-2) // ListBuffer(-2,1, 2, 5, 3, 2, -1)
//追加新的集合元素 产⽣新的集合数组,修改原始集合
list.++=(List(7,8,9)) // ListBuffer(1, 2, 5, 3, 2, 7, 8, 9)
list.++=:(List(7,8,9))// ListBuffer(7, 8, 9, 1, 2, 5, 3, 2, 7, 8, 9)
//删除n个元素 产⽣新的集合数组,不会修改原始集合
list.drop(3) //List(3, 2)
list.dropRight(3) //List(1, 2)
//删除符合条件的元素,匹配⼀个⽴即终⽌
list.dropWhile(item=> item < 5) // List(5, 3, 2)
//选择⼀个⼦集 从0开始到4不包含4 产⽣新的集合数组,不会修改原始集合
list.slice(0,4)
//前后翻转集合 产⽣新的集合数组,不会修改原始集合
list.reverse // List(2, 3, 5, 2, 1)
//去除重复 产⽣新的集合数组,不会修改原始集合
list.distinct // List(1, 2, 5, 3)
//获取前n个元素 产⽣新的集合数组,不会修改原始集合
list.take(3) //List(1, 2, 5)
list.takeRight(3) //List(5, 3, 2)
//⼀直拿,直到第⼀个不满⾜条件终⽌ 产⽣新的集合数组,不会修改原始集合
list.takeWhile(item => item < 5 ) //List(1, 2)
//获取第⼀个元素、最后⼀个元素、除第⼀个以外的所有元素
list.head
list.last
list.tail
//获取数组⼤⼩
list.size
list.length
//获取数组指定位置的元素
list(2) // 5
//修改指定位置
list(2) = 12 // ListBuffer(1, 2, 12, 3, 2)
list.update(2,5) //ListBuffer(1, 2, 5, 3, 2)
//删除某个元素 修改原始集合
list.-=(1) // ListBuffer(2, 5, 3, 2)
//删除指定位置元素 修改原始集合
var item=list.remove(2)
//从指定位置 插⼊元素 修改原始集合
list.insert(0,-1,-2) //从0位置插⼊ -1,-2
list.insertAll(0,List(0,0))
Set-不可变
//创建集合 去重
var s=Set[Int](1,2,4,5,3)
//添加⼀个元素 产⽣新的集合Set,不会修改原始集合
s.+(6) //Set(5, 1, 6, 2, 3, 4)
//删除元素 产⽣新的集合Set,不会修改原始集合
s.-(5) // Set(1, 2, 3, 4)
//获取set⼤⼩
s.size
//添加⼀个集合 产⽣新的集合Set,不会修改原始集合
s.++(List(6,6,7)) //Set(5, 1, 6, 2, 7, 3, 4)
//判断元素是否存在
var isExists=s(5) //true
isExists=s(7) //false
Set-可变
import scala.collection.mutable.Set
//创建集合 去重
var s=Set[Int](1,2,4,5,3)
//添加⼀个元素 产⽣新的集合Set,不会修改原始集合
s.+(6) //Set(5, 1, 6, 2, 3, 4)
//添加⼀个元素 产⽣新的集合Set,修改原始集合
s.add(6) //Set(5, 1, 6, 2, 3, 4)
//删除元素 产⽣新的集合Set,不会修改原始集合
s.-(5) // Set(1, 2, 3, 4)
//删除元素 产⽣新的集合Set,修改原始集合
s.remove(5) //Set(1, 2, 3, 4)
//获取set⼤⼩
s.size
//添加⼀个集合 产⽣新的集合Set,不会修改原始集合
s.++(List(6,6,7)) //Set(5, 1, 6, 2, 7, 3, 4)
//判断元素是否存在
var isExists=s(5) //true
isExists=s(7) //false
HashMap-不可变
import scala.collection.immutable.HashMap
var hm= HashMap[String,String](("建设","001"),("招商","002"))
//添加⼀个元素,并不会修改原始的Map
hm.+(("农业","003"))
hm.+("⺠⽣"->"004")
//删除元数据,并不会修改原始的Map
hm.-("建设","招商")
//获取指定key的值
val value: Option[String] = hm.get("建设")
val sv1= value.get //该值必须存在
val sv2= value.getOrElse("啥也没有" )
//判断key是否存在
hm.contains("建设")
//更新⼀个key,并不会修改原始的Map
hm.updated("建设","003")
//获取所有keys
val keys = hm.keys
val values = hm.values
//遍历⼀个Map
for(i<- hm.keys){
println(i+" "+hm.get(i).getOrElse(""))
}
//合并两个map
var hm2=HashMap[String,String]("⼯商"->"003",("建设","005"))
//在key出现重复的时候,使⽤t2覆盖t1的元素
hm.merged(hm2)((t1,t2)=> t2)
HashMap-可变
import scala.collection.mutable.HashMap
var hm=HashMap[String,String](("建设","001"),("招商","002"))
//添加⼀个元素,并不会修改原始的Map
hm.+(("农业","003"))
hm.+("⺠⽣"->"004")
//添加⼀个元素,修改原始的Map
hm.put("⼯商","005")
//删除元数据,并不会修改原始的Map
hm.-("建设","招商")
//删除元数据,修改原始的Map
hm.remove("建设")
//获取指定key的值
val value: Option[String] = hm.get("建设")
val sv1= value.get //该值必须存在
val sv2= value.getOrElse("啥也没有")
//判断key是否存在
hm.contains("建设")
//更新⼀个key,并不会修改原始的Map
hm.updated("建设","003")
//获取所有keys
val keys = hm.keys
val values = hm.values
//遍历⼀个Map
for(i<- hm.keys){
println(i+" "+hm.get(i).getOrElse(""))
}
Java集合和Scala集合相互转换
import scala.collection.JavaConverters._
object TestJavaScalaCollection {
def main(args: Array[String]): Unit = {
val arrayList = new util.ArrayList[String]()
arrayList.add("hello")
arrayList.add("word")
for(i <- 0 until arrayList.size()){
println(arrayList.get(i))
}
val scalaList = arrayList.asScala
for(i<- scalaList){
println(i)
}
val javaList = scalaList.asJava
for(i <- 0 until javaList.size()){
println(javaList.get(i))
}
}
}