kotlin数组和集合

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kotlin数组和集合相关的知识,希望对你有一定的参考价值。

参考技术A kotlin 为数组增加了 Array 类,为元素是基本类型的数组增加了 XxxArray 类(其中Xxx 可以是 Byte、Short、Int 等基本类型)

kotlin 的集合体系抛弃了 Java 集合体系中的 Queue 集合,但增加了可变集合和不可变集合的概念,与java集合类似的是, kotlin的List 代表有序、集合元素可重复的集合 Set 代表无序、集合元素不可重复的集合,Map则采用 key-value 对的形式存储数据

kotlin 既可允许通过 Array<T>类的构造器来创建实例,也可通过arrayOf()等工具函数来创建实例

arrayOf():无须显式指定数组的长度,但需要依次列出每个数组元素

arrayOfNulls():需要显式指定数组的长度,数组元素全部被初始化null,需要用泛型指定数组元素的类型

emptyArray():创建一个长度为0的空数组,需要用泛型指定数组元素的类型

Array(size:Int, init: (Int)->T)构造器:需要显式指定数组的长度,并可通过 Lambda 表达式来动态计算各数组元素的值

由于Array<T>类要求它的元素必须是引用类型,因此,如果程序将基本类型的值存入 Array<T>中 Kotlin 会将这些基本类型的值自动装箱成包装类,为此, kotlin 专门提供了 ByteArray、ShortArray、IntArray、LongArray、CharArray、FloatArray、DoubleArray、BooleanArray 用于存储基本类型,不会进行自动装箱

XxxArray 数组不支持使用将元素初始化为 null 方式来创建数组,因为基本类型的元素不允许为 null

访问数组元素都是通过在数组引用变量后紧跟一个方括号[]实现的,方括号里是数组元素的索引,索引值大于0,且小于数组的长度

程序还可使用in 、!in 来检查某个索引是否位于数组的索引区间内,Kotlin 还为数组提供了lastlndex 属性,用于返回数组最后一个元素的索引值,该索引值通常等于size-1

由于数组还提供了用 operator 修饰的 plus()、 contains()方法,因此数组可通过+、 in 运算符进行运算

用一维数组的方式来处理多维数组

Kotlin 的集合类由两个接口派生:Collection和Map,又被分成两大类:可变集合和不可变集合,只有可变集合才能添加、删除、修改元素,不可变集合只能读取元素

Kotlin 只提供了 HashSet、HasMap、LinkedHashSet、LinkedHashMap、ArrayList 这几个集合实现类,而且它们都是可变集合,Kotlin 的不可变集合类并没有暴露出来,只能通过函数来创建不可变集合,依然可以使用 Java 集合框架提供的其他集合类

推荐使用 Kotlin 提供的工具函数来创建 Set 集合

其中 setOf()、mutableSetOf()、linkedSetOf()创建的 Set 集合能维护元素的添加顺序sortedSetOf()函数创建的 Set 集合会按照大小对元素排序,如果希望 Set 集合不维护元素顺序,只有通过 hashSetOf()函数创建 Set 集合才行

Set 集合中很多方法与 Array 的方法功能相似,例如 all (判断是否所有集合元素都满足指定规则)、 any(判断是否任一元素都满足指定规则)、associate(根据 Set 集合生成Map 集合)、drop(按规则去除集合的部分元素)、filter(对集合元素执行过滤)、 find(查找集合元素)

Set和MutableSet 都包含 Iterator()方法,但普通 Set的iterator()方法返回的是Iterator 对象,该 Iterator 对象只有 hasNextOf()、nextOf()两个方法:而 MutableSet的iterator()方法返回的是 Mutablelterator 对象,该对象除hasNextOf()、nextOf()两个方法之外,还提供了一个remove()方法,该方法可用于在遍历时删除元素

List 集合的最大特征有序可重复

推荐使用工具函数来创建List 集合

Set 支持的操作 List 一般都能支持,还增加了通过索引操作集合元素的方法

在可变的 Set 中介绍的方法,可变的 List 也完全支持,还增加了根据索引执行插入、删除、替换的方法

用于保存 key-value 对,也被分为可变的和不可变的

推荐使用 Kotlin 提供的工具函数来创建 Map 集合

Kotlin基础集合类型

集合基本这3大类型

Array 有序可重复
Set 无序不重复
Map无序可重复

//默认数组10个1
var lists = Array<Int> (10,1)
//创建数组
//数组不可改变(类似Java中的Arrays.asList())
var list = arrayOf(10,1,2,6,7,8,9)
var set = setOf<Int>(77,88,99)
var map = mapOf<Int, Int>(Pair(1,2), Pair(4,5))
for (a in listt) 
    //println(a)

for (b in list) 
    //println(b)




//创建1~5的数组
var list3 = Array(5, i->i+1)
for (b in list3) 
    //println(b)

常用方法

//计数
println(list.count())
println(list.size)
//空
println(list.isEmpty())
println(list.isNotEmpty())
//第一个
println(list.first())
//最后一个
println(list.last())
//第一~第五
println(list.component1())
println(list.component2())
println(list.component3())
println(list.component4())
println(list.component5())

//去重复
println(list.distinct())
//去重复
println(list.toSet())
//切割数组(1<=index<=2)
list.sliceArray(1..2)

//可变数组,上面的数组不可改变

var muList= mutableListOf(11,22,33)
var muList2 = mutableListOf(1,2,3)
var muMap= mutableMapOf(Pair(1,2))
var muSet= mutableSetOf(1,1,1,2)
muList.add(4)
muList.removeAt(1)
muMap.put(3,3)
muMap.remove(3)
muSet.add(5)
muSet.remove(2)

//是否包含某个元素,
muList.contains(1)
muMap.contains(1)
muSet.contains(1)
//包含另一个set
muList.containsAll(list44)

//转化为可变
list.toMutableList()

//转化为数组
set.toTypedArray()
//转化为可变
set.toMutableSet()

//组合,数据合并
var all = list.union(set).union(list4)
print("哈哈"+all)

//根据key得到值
var value = map.get(2)
var elseValue = map.getOrElse(2, 333)
//所有的key和value
var mapKeys = map.keys
var mapValues = map.values
//是否存在key或者value
var booKey = map.containsKey(1)
var booValue = map.containsValue(2)

以上是关于kotlin数组和集合的主要内容,如果未能解决你的问题,请参考以下文章

每天学一点 Kotlin -- 集合:Array 数组

Kotlin-数组与集合-List

Kotlin系列之数组与集合

请教问下kotlin中怎么在集合中添加数组元素

用 Kotlin 写 Android 3—数组,集合与字符串

每天学一点 Kotlin -- 集合:MutableMap