当前位置:网站首页>Scala collections

Scala collections

2022-08-10 15:24:00 S_ng

概念说明
o 该集合与 Java 中的集合类似,只是 scala reimplemented its own collection
抽象
o 分为可变集合和不可变集合
o List of common collections

 

应用示例
o Scala List(列表)
概念说明
类似于数组,require all elements to be of the same type,through the paradigm
约束
Lists are immutable collections,一旦定义了就不能改变
Lists are defined recursively,可以嵌套定义,This is with the array
最大的不一样.
应用示例
列表初始化
def main(args: Array[String]) {
// 字符串列表
val language: List[String] = List("java",
"python", "c++")
// 整型列表
val nums: List[Int] = List(1, 2, 3, 4)
// 空列表
val empty: List[Nothing] = List()
// 二维列表
val dim: List[List[Int]] =
List(
List(1, 0, 0),
List(0, 1, 0),
List(0, 0, 1))
}
用 Nil 和::来构建列表
def main(args: Array[String]) {
// 字符串列表
val language= "java" :: ("python" :: ("c++" :: Nil))
// 整型列表
val nums = 1 :: (2 :: (3 :: (4 :: Nil)))
// 空列表
val empty = Nil
// 二维列表
val dim = (1 :: (0 :: (0 :: Nil))) ::
(0 :: (1 :: (0 :: Nil))) ::
(0 :: (0 :: (1 :: Nil))) :: Nil
常用操作
o head 返回列表第一个元素
o tail 返回一个列表,包含除了第一元素之外的其他元素
o isEmpty 在列表为空时返回 true
o ::: 运算符或 List.:::() 方法或 List.concat() method to connect two or more
个列表
o List.fill() 方法来创建一个指定重复数量的元素列表
o List.tabulate() 方法是Create a list with the given function.
o List.reverse 用于将列表的顺序反转
应用示例
object TestListFunction {
def main(args: Array[String]) {
val language1 = "java" :: ("python" :: ("c++" ::
Nil))
val nums = Nil
/**
* 基本操作
*/
println("基本操作--------");
println("第一语言是 : " + language1.head)
println("除第 1 Languages ​​other than this language are : " +
language1.tail)
println("查看列表 site 是否为空 : " +
language1.isEmpty)
println("查看 nums 是否为空 : " + nums.isEmpty)
/**
* 列表连接
*/
println("列表连接--------");
val language2 = "c" :: ("php" :: ("go" :: Nil))
// 使用 ::: 运算符
var mainLanguages = language1 ::: language2
println("language1 ::: language2 : " + mainLanguages)
// 使用 List.:::() 方法
mainLanguages = language1.:::(language2)
println("language1.:::(language2) : " + mainLanguages)
// 使用 concat 方法
mainLanguages = List.concat(language1, language2)
println("List.concat(language1, language2) : " +
mainLanguages)
/**
* fill Fill the repeating element of the list
*/
println("List fill--------");
val bestLanguage = List.fill(3)("php") // 重复 Runoob 
3 次
println("bestLanguage : " + bestLanguage)
val num = List.fill(10)("php") // 重复元素 "php", 10 次
println("num : " + num)
/**
* List tabulate Create a list with the given function
*/
println("List tabulate--------");
// 通过给定的函数创建 6 个元素
val squares = List.tabulate(6)(n => n * n)
println("一维 : " + squares)
// 创建二维列表
val mul = List.tabulate(4, 5)(_ * _)
println("多维 : " + mul)
/**
* List.reverse 用于将列表的顺序反转
*/
println("List.reverse--------");
println(mainLanguages.reverse);
} }

Scala Set(集合) o 概念说明
 没有重复的对象集合,所有的元素都是唯一的
 Set 集合分为可变的和不可变的集合
 Use immutable collections by default,The full classpath is:
scala.collection.immutable.Set
 To refer to a mutable collection type,then the classpath is:
scala.collection.mutable.Set
o Base application example
 不Mutable collection usage

def main(args: Array[String]): Unit = {
//初始化 set 集合
val set = Set(1, 2, 3, 4, 5, 6)
//得到对应的 set 路径
println(set.getClass.getName)
//利用 exists 方法,To determine whether a collection elements exist%2==0 的元素
println(set.exists(_ % 2 == 0))
//print the current collection sequence
println(set) }  Mutable collection usage
def main(args: Array[String]): Unit = {
//初始化 set 集合
val mutableSet = Set(1, 2, 3, 4, 5, 6)
//get mutable collection set 路径
println(mutableSet.getClass.getName)
//添加元素
mutableSet.add(4)
println("添加元素 4 后="+mutableSet)
//删除元素
mutableSet.remove(1)
println("删除元素 1 后="+mutableSet)
mutableSet += 7
println("+7 后"+mutableSet)
mutableSet -= 2
println("-2 后"+mutableSet)
//will be variable set convert to immutable set
val another = mutableSet.toSet
println(another.getClass.getName) // 
scala.collection.immutable.Set
}
常用操作o head 返回集合第一个元素
o tail 返回一个集合,包含除了第一元素之外的其他元素
o isEmpty 在集合为空时返回 true
o 使用 ++ 运算符或 Set.++() 方法来连接两个集合
o 使用 Set.min 方法来查找集合中的最小元素,使用 Set.max 方法
Find the largest element in a collection
o 使用 Set.& 方法或 Set.intersect method to view the intersection element of two sets
素.实例
Common application examples
def main(args: Array[String]): Unit = {
val languageSet1 = Set("java", "python", "c++")
val numSet: Set[Int] = Set()
/**
* 基本操作
*/
println("基本操作--------");
println("第一语言是 : " + languageSet1.head)
println("除第 1 Languages ​​other than this language are : " +
languageSet1.tail)
println("查看列表 site 是否为空 : " +
languageSet1.isEmpty)
println("查看 nums 是否为空 : " + numSet.isEmpty)
/**
* Collection join operation
*/
println("集合连接--------");
val languageSet2 = Set("c", "php", "go")
// ++ use as an operator
var mainlanguageSet = languageSet1 ++ languageSet2
println("languageSet1 ++ languageSet2 : " +
mainlanguageSet)
// ++ 作为方法使用
mainlanguageSet = languageSet1.++(languageSet2)
println("languageSet1.++(languageSet2) : " +
mainlanguageSet)
/**
* Find the largest set、最小元素
*/
println("Find the largest and smallest elements of a set--------");
println("mainlanguageSet The smallest element in the set is : " +
mainlanguageSet.min)
println("mainlanguageSet The largest element in the set is : " +
mainlanguageSet.max)
/**
* 求交集
*/
println("求集合的交集--------")
var secondLanguageSet=Set("shell","perl","java")
println("mainlanguageSet.&(secondLanguageSet) : " +
mainlanguageSet.&(secondLanguageSet))
println("mainlanguageSet.intersect(secondLanguageSet) 
: " + mainlanguageSet.intersect(secondLanguageSet))
}

Scala Map(映射) o 概念说明
 一种可迭代的键值对(key/value)结构,也称为哈希表
 所有的值都可以通过键来获取,键值是唯一的
 两种类型,可变与不可变,The difference is that mutable objects can be modified
它,而不可变对象不可以
 默认使用的不可变 Map,可变的 Map 需要使用 import 
scala.collection.mutable.Map 类 o 基础示例

def main(args: Array[String]): Unit = {
// Immutable null Map,键为字符串,值为整型
var personMap: Map[String, String] = Map()
// Immutable initialization
val languageMap = Map("java" -> "java 程序设计",
"python" -> "python 程序设计", "c++" -> "c++程序设计")
//dynamic to immutable map 中添加值
personMap += ("001" -> "张三")
//languageMap += ("java" -> "It's new") //此处会报错
println(personMap)
println(languageMap)
//Initialize mutable Map
val languageMap2 = scala.collection.mutable.Map("java"
-> "java 程序设计", "python" -> "python 程序设计", "c++" ->
"c++程序设计")
//variable Map 中添加值
languageMap2.put("python","已经更新了")
println(languageMap2) }

关于不可变和可变 Map 的总结
o 不可变 Map
 api 不太丰富
 如果是 var 修饰,引用可变,支持读写
 如果是 val 修饰,引用不可变,只能写入一次值,其后只读

o 可变 Map
 api 丰富与 Java 中 Map 基本类似
 如果是 var 修饰,引用可变,支持读写
 如果是 val 修饰,引用不可变,支持读写
o 总结
 可变与不可变,主要是通过 val 和 var 来限定达到意图
 api 丰富程度不一样
 常用操作
o keys:返回 Map 所有的键(key)
o values:返回 Map 所有的值(value)
o isEmpty:在 Map 为空时返回 true
o 使用++运算符或 Map.++()方法来连接两个 Map,Map move when merging
except duplicates key. o 通过 foreach 循环输出 Map 中的 keys 和 values: o 使用 Map.contains 方法来查看 Map 中是否存在指定的 Key
 综合示例

def main(args: Array[String]): Unit = {
// Immutable null Map,键为字符串,值为整型
var personMap: Map[String, String] = Map()
// Immutable initialization
val languageMap = Map("java" -> "java 程序设计",
"python" -> "python 程序设计", "c++" -> "c++程序设计")
/**
* 基础操作
*/
println("基础操作---------")
println("languageMap 中的键为 : " + languageMap.keys)
println("languageMap 中的值为 : " +
languageMap.values)
println("检测 languageMap 是否为空:" +
languageMap.isEmpty)
println("检测 personMap 是否为空: " +
personMap.isEmpty)
/**
* map 合并
*/
println(" map 合并---------")
val languageMap2 = Map("C" -> "C 程序设计")
// ++ 作为运算符
var mainLanguages = languageMap ++ languageMap2
println("languageMap ++ languageMap2 : " +
mainLanguages)
// ++ 作为方法
mainLanguages = languageMap.++(languageMap2)
println("languageMap.++(languageMap2)) : " +
mainLanguages)
/**
* map 的 keys 和 values 输出
*/
println("map 的 keys 和 values 输出---------")
mainLanguages.keys.foreach { i =>
print("Key = " + i)
println(" Value = " + mainLanguages(i))
}
/**
* 查看 Map 中是否存在指定的 Key
*/
println("查看 Map 中是否存在指定的 Key---------")
if (mainLanguages.contains("java")) {
println("java 键存在,对应的值为 :" +
mainLanguages("java"))
} else {
println("java 键不存在") }
if (mainLanguages.contains("c#")) {
println("java 键存在,对应的值为 :" +
mainLanguages("c#"))
} else {
println("c#键不存在") } }
Scala 元组
o 概念说明
与列表相似,元组是不可变的
与列表不同的是,元组可以包含不同类型的元素
元组是通过"()"来定义的
o 应用示例
def main(args: Array[String]): Unit = {
//直接定义元组
var personInfo = ("s0001", "张三", 21, "河北科技大学", 1.80)
//通过 TupleN 来定义,N 可以是 1 至 22 optional number of tuples
var pessonInfoTuple5 = new Tuple5("s0001", "张三", 21, "河北科技大学",
1.80);
/**
* 元组访问,Access by index subscript of tuple,从 1 开始,元组对象._1 代表第 1 个元素,
元组对象._2 代表第 2 个元素,
*/
println("元组访问---------");
println("学号=" + personInfo._1);
println("姓名=" + personInfo._2);
println("年龄=" + personInfo._3);
println("学校=" + personInfo._4);
println("身高=" + personInfo._5);
/**
* 元组遍历
*/
println("元组遍历---------");
personInfo.productIterator.foreach { i => println("元素值 = " + i) }
/**
* 元组转换成字符串
*/
println("元组转换成字符串 ---------");
println(personInfo.toString())
}
Scala Option[T]
o 概念说明
表示有可能包含值的容器,也可能不包含值.Mainly used for table
Indicates that a value is optional
Option[T] 是一个类型为 T 的可选值的容器: 如果值存
在, Option[T] 就是一个 Some[T] ,如果不存在,
Option[T] 就是对象 None .
o 常用方法
getOrElse() Method to get the element that is found in the tuple or use its vision
recognized value
isEmpty() 方法来检测元组中的元素是否为 None
o 应用示例
def main(args: Array[String]): Unit = {
//定义一个 map 对象
val mainLanguagesMap = Map("java" -> "java 程序设计",
"python" -> "python 程序设计")
//By specifying the key value,get possible value,其返回值是一个
Option[T],Indicates that there may be a corresponding key value value,也有可能不存在
var javaDesc: Option[String] =
mainLanguagesMap.get("java");
var phpDesc: Option[String] =
mainLanguagesMap.get("php");
//print the result
println("mainLanguagesMap.get(\"java\") : " +
javaDesc)
println("mainLanguagesMap.get(\"php\") : " +
phpDesc)
//Determine whether the result has value,即是否为 None
println("javaDesc.isEmpty: " + javaDesc.isEmpty)
println("phpDesc.isEmpty: " + phpDesc.isEmpty)
//do the result getOrElse 操作,That is, if there is no such key,则取
方法的默认值
println("mainLanguagesMap.get(\"java\") : " +
javaDesc.getOrElse("没有拿到 java 的描述信息"))
println("mainLanguagesMap.get(\"php\") : " +
phpDesc.getOrElse("没有拿到 php 的描述信息"))
}
Scala Iterator(迭代器)
o 概念说明
不是一个集合,它是一种用于访问集合的方法.
基本操作是 hasNext 和 next
o 常用方法或属性
it.hasNext() 用于检测集合中是否还有元素.
it.next() 会返回迭代器的下一个元素,并且更新迭代器
的状态
max:取得迭代器对应集合的最大值
min:取得迭代器对应集合的最小值
size/length:取得迭代器对应集合的长度
o 应用示例
def main(args: Array[String]): Unit = {
val it1 = Iterator("java", "python", "c++")
val it2 = Iterator("java", "python", "c++")
val it3 = Iterator("java", "python", "c++")
val it4 = Iterator("java", "python", "c++")
val it5 = Iterator("java", "python", "c++")
/**
* 迭代器遍历集合
*/
println("遍历集合---------");
while (it1.hasNext) {
println(it1.next())
}
/**
* Iterator to find the maximum value of a collection
*/
println("Find the maximum value of an iterator collection---------");
println(it2.max)
/**
* Iterator to find the minimum value of a collection
*/
println("Find the minimum value of an iterator set---------");
println(it3.min)
/**
* Iterator to find length of collection
*/
println("Iterator to find length of collection---------");
println(it4.size)
println(it5.length) }

原网站

版权声明
本文为[S_ng]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/222/202208101443547672.html