Kotlin集合——Set集合
Kotlin集合——Set集合
Kotlin的集合类由两个接口派生:Collection和Map。
Kotlin的集合分为两大类:可变集合和不可变集合。只有可变集合才能添加、删除、修改元素,不可变集合只能读取元素。
Kotlin的Collection集合和Set集合的功能基本相同,Set集合只是为Collection集合增加了额外的限制:集合元素不允许重复。
一、声明和创建
Kotlin提供了如下函数来创建Set集合。
- setOf():该函数返回不可变的Set集合。该函数可以接受0个或多个参数,这些参数将作为集合的元素。
- mutableSetOf():该函数返回可变的MutableSet集合。该函数可接受0个或多个参数,这些参数将作为集合的元素。
- hashSetOf():该函数返回可变的HashSet集合。该函数可接受0个或多个参数,这些参数将作为集合的元素。
- linkedSetOf():该函数返回可变的LinkedHashSet集合。该函数可接受0个或多个参数,这些参数将作为集合的元素。
- sortedSetOf():该函数返回可变的TreeSet集合。该函数可接受0个或多个参数,这些参数将作为集合的元素。
//创建不可变集合,返回值是Set
var set = setOf("Java", "Kotlin", "Go")
println(set)//集合元素按添加顺序排列
//创建可变集合,返回值是MutableSet
var mutableSet = mutableSetOf("Java", "Kotlin", "Go")
println(mutableSet)//集合元素按添加顺序排列
println("setOf返回对象的实际类型:${set.javaClass}")
println("mutableSetOf返回对象的实际类型:${mutableSet.javaClass}")
//创建HashSet集合
var hashSet = hashSetOf("Java", "Kotlin", "Go")
println(hashSet)//不保证元素的顺序
//创建LinkedHashSet集合
var linkedHashSet = linkedSetOf("Java", "Kotlin", "Go")
println(linkedHashSet)//集合元素按添加顺序排列
//创建TreeSet集合
var treeSet = sortedSetOf("Java", "Kotlin", "Go")
println(treeSet)//集合元素由小到大排列
输出结果:
[Java, Kotlin, Go]
[Java, Kotlin, Go]
setOf返回对象的实际类型:class java.util.LinkedHashSet
mutableSetOf返回对象的实际类型:class java.util.LinkedHashSet
[Go, Java, Kotlin]
[Java, Kotlin, Go]
[Go, Java, Kotlin]
二、使用Set的方法
//创建不可变集合,返回值是Set
var set = setOf("Java", "Kotlin", "Go")
//判断是否所有元素的长度都大于4
println(set.all { it.length > 4 })
//判断是否任一元素的长豆都大于4
println(set.any { it.length > 4 })
//以Lambda表达式的值为key,集合元素为value,组成Map集合
val map = set.associateBy { "学习" + it + "语言" }
println(map)
println("Java" in set)
println("Go" !in set)
//返回删除Set集合前面两个元素后的集合
val dropedList = set.drop(2)
println(dropedList)
//对Set集合元素进行过滤:要求集合元素包含li
val fliteredList = set.filter { "li" in it }
println(fliteredList)
//查找Set集合中包含li的元素,如果找到就返回该元素,否则就返回null
val foundStr1 = set.find { "li" in it }
println(foundStr1)
//查找Set集合中的所有字符串拼接在一起
val foldedList = set.fold("", { acc, e -> acc + e })
println(foldedList)
//查找某个元素的出现位置
println(set.indexOf("Go"))
//将每个集合元素映射成新值,返回所有新值组成的Set集合
val mappedList = set.map { "学习" + it + "编程" }
println(mappedList)
//获取最大值
println(set.max())
//获取最小值
println(set.min())
//反转集合顺序
val reversedList = set.reversed()
println(reversedList)
val bSet = setOf("Lua", "Erlang", "Kotlin")
//计算两个集合的交集
println(set intersect bSet)
//计算两个集合的并集
println(set union bSet)
//集合相加,相当于并集
println(set + bSet)
//集合相减,减去公共的元素
println(set - bSet)
输出结果:
false
true
{学习Java语言=Java, 学习Kotlin语言=Kotlin, 学习Go语言=Go}
true
false
[Go]
[Kotlin]
Kotlin
JavaKotlinGo
2
[学习Java编程, 学习Kotlin编程, 学习Go编程]
Kotlin
Go
[Go, Kotlin, Java]
[Kotlin]
[Java, Kotlin, Go, Lua, Erlang]
[Java, Kotlin, Go, Lua, Erlang]
[Java, Go]
Kotlin规定以infix修饰的方法,能以运算符的方式进行调用。
三、遍历Set
Kotlin也支持使用for-in循环遍历Set,与遍历数组的方式基本相同。
var languages = setOf("Java", "Kotlin", "Python")
for (language in languages) {
println(language)
}
输出结果:
Java
Kotlin
Python
Set集合可使用接口中定义的forEach()方法来遍历集合。
var languages = setOf("Java", "Kotlin", "Python")
languages.forEach { println(it) }
输出结果:
Java
Kotlin
Python
由于setOf()方法返回的Set集合是有序的,所以可以通过索引来遍历Set集合,Set集合提供了indices方法返回其索引的区间。
var languages = setOf("Java", "Kotlin", "Python")
for (i in languages.indices) {
println(languages.elementAt(i))
}
输出结果:
Java
Kotlin
Python
四、可变的Set
setOf()函数返回的额集合是不可变集合;使用mutableSetof()、hashSetOf()、linkedSetOf()、sortedSetOf()函数返回的集合都是可变的。
4.1、添加元素
Set提供了add(element:E)方法来添加元素,每调用该方法一次,就会向Set中添加一个元素,Set的长度也会自动加1.
提供了addAll(elements:Collection<E>)方法来批量添加多个元素。
//定义一个可变的Set
var languages = mutableSetOf("Java")
//添加一个元素
languages.add("Go")
languages.add("Lua")
println(languages)
println(languages.count())
languages.addAll(setOf("Swift", "Kotlin"))
println(languages)
输出结果:
[Java, Go, Lua]
3
[Java, Go, Lua, Swift, Kotlin]
4.2、删除元素
Set提供了如下方法来删除元素:
- remove(element:E):删除指定元素,删除成功则返回true。
- removeAll(elements:Collection<E>):批量删除Set集合中的多个元素。
- retainAll(elements:Collection<E>):只保留Set集合中与elements集合共有的元素。
- clear():清空集合。
//定义一个可变的Set
var languages = mutableSetOf("Java", "OC", "PHP", "Perl", "Ruby", "Go")
//删除"PHP"
languages.remove("PHP")
//再次删除"Perl"
languages.remove("Perl")
println(languages)
//批量删除多个元素
languages.removeAll(setOf("Ruby", "Go"))
println(languages)
//清空Set集合
languages.clear()
println(languages.count())
输出结果:
[Java, OC, Ruby, Go]
[Java, OC]
0
Kotlin的MutableIterator才相当于Java的Iterator。
Kotlin集合——Set集合的更多相关文章
- Kotlin集合——List集合
Kotlin集合——List集合 转 https://www.jianshu.com/p/3f3bb4943638 List集合的最大特征就是集合元素都有对应的顺序索引.List集合允许使用重复元 ...
- Kotlin集合——Map集合
Kotlin集合——Map集合 转 https://www.jianshu.com/p/da5cc9072f1e Kotlin的Map集合用于保存key-value对,其也被分为可变的和不可变的. 一 ...
- 【BZOJ-4199】品酒大会 后缀数组 + 并查集合并集合
4199: [Noi2015]品酒大会 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 436 Solved: 243[Submit][Status] ...
- Linq to 泛型集合查询集合包括大写M和年龄小于等于18
#region Linq to 泛型集合查询集合包括大写M和年龄小于等于18 //List<Student> list = new List<Student&g ...
- IT第二十一天 - Collections、ArrayList集合、LinkedList集合、Set集合、HashMap集合、集合的操作注意【修20130828】
NIIT第二十一天 上午 集合 1. 集合Collection存储数据的形式是单个存储的,而Map存储是按照键值对来存储的,键值对:即键+值同时存储的,类似align="center&quo ...
- 数组转集合、集合转数组、字符串数组与int型、long型数组等的转换
在项目中经常会遇到数组转集合.集合转数组.数组之间类型转换等操作 1.数组转集合 为了实现把一个数组转换成一个ArrayList,很多Java程序员会使用如下的代码: String str[] = { ...
- 廖雪峰Java5集合-1Java集合简介-1Java结合简介
1.集合 定义:集合就是一堆东西.集合里的东西,称为元素Element 数学中的集合: 有限集合: * 一个班所有的学生组成的集合 * 一个网站所有的商品组成的集合 无限集合: * 全体自然数集合 * ...
- Java集合 -- ArrayList集合及应用
JAVA集合 对象数组 集合类之ArrayList 学生管理系统 斗地主案例 NO.one 对象数组 1.1 对象数组描述 A:基本类型的数组:存储的元素为基本类型 int[] arr={1,2,3, ...
- Java集合----Set集合
Set集合 Set 集合不允许包含相同的元素,如果试把两个相同的元素加入同一个 Set 集合中,则添加操作失败. Set 判断两个对象是否相同不是使用 == 运算符,而是根据 equals 方法 Ha ...
随机推荐
- [LeetCode] 0752. Open the Lock 打开转盘锁
题目 You have a lock in front of you with 4 circular wheels. Each wheel has 10 slots: '0', '1', '2', ' ...
- python---Numpy模块中线性代数运算,统计和数学函数
NUMPY告一段落,接下来,进入pandas. import numpy as np # Numpy 线性代数运算 # Numpy 统计和数学函数 print('==========计算矩阵与其转置矩 ...
- Redis中如何保证数据库和缓存双写时的数据的一致性?
简单的场景: 直接使用 1. 使用Cache Aside pattern 读取的时候,先读取缓存中是否有数据,缓存中没有数据,再去数据库中进行查询,查询出来以后,然后再存入到缓存中 更新的时候,先删除 ...
- Django之路——4 Django的视图层
一个视图函数简称称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . . 是任何 ...
- 《你说对就队》第八次团队作业:Alpha冲刺 第三天
<你说对就队>第八次团队作业:Alpha冲刺 第三天 项目 内容 这个作业属于哪个课程 [教师博客主页链接] 这个作业的要求在哪里 [作业链接地址] 团队名称 <你说对就队> ...
- python3.7内置函数整理笔记
#python3.7 内置函数整理 #abs(x) #返回数字的绝对值. 参数可以是整数或浮点数. 如果参数是复数,则返回其大小 # print(abs(1)) # print(abs(-1)) # ...
- Vue钩子函数
Vue的生命周期函数 beforeCreate:function(){ console.log('1-beforeCreate 初始化之后'); }, created:function(){ cons ...
- 学习Kubernetes,这些负载均衡知识点得知道!
负载均衡 负载均衡是高可用架构的一个关键组件,主要用来提高性能和可用性,通过负载均衡将流量分发到多个服务器,同时多服务器能够消除这部分的单点故障. 一个没有使用负载均衡的Web架构一般会长得像这样: ...
- c语言1博客作业08
一.本周作业头 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 http://edu.cnblogs.com/campus/zswxy/SE2019-3/homework/9982 我在 ...
- 07 Node.js安装及环境配置
二.安装Node.js步骤 1.下载对应你系统的Node.js版本:https://nodejs.org/en/download/2.选安装目录进行安装3.环境配置4.测试 开始安装 1.下载完成后, ...