二、数组和集合
1、数组
Kotlin的数组是Array
1.1 创建数组
大致有两种方式
- 使用
arrayOf()
、arrayOfNUlls()
、emptyArray()
工具函数 - 使用
Array(size:Int,init:(Int)->T)
构造器
下面代码示范了创建数组
//创建包含指定元素的数组
var arr1 = arrayOf(1, 2, 3)
//创建指定长度,元素为null的数组,必须指定泛型的值
var arr2 = arrayOfNulls(4)
//创建长度为0的空数组
var arr3 = emptyArray()
//创建指定长度,使用Lambda表达式初始化数组元素的数组
var arr4 = Array(5, { "hello" })
此外,由于Array
//创建包含指定元素的数组
var arr1 = intArrayOf(1, 2, 3)
//创建指定长度,使用Lambda表达式初始化数组元素的数组
var arr2 = IntArray(5, { it * it })
从上面的代码可以看出,对于XxxArray数组,不再支持将元素初始化为null方式来创建数组——因为基本类型的元素不允许null
1.2 使用数组
使用[]来取指定索引处的元素,对应的是get(index)方法
1.3 for-in遍历数组
var books = arrayOf("书本1", "书本2")
//for-in遍历
for (book in books) {
}
数组还提供了indices
属性,返回数组的索引范围;lastIndex
属性,返回最后一个元素的索引值。
1.4 控制循环结构
break和continue是用来跳出循环的关键字,当嵌套了2层循环的时候,如何跳到最外层的循环呢?这个时候就要用到标签,Kotlin的标签就是一个紧跟着@的标识符。
outer@ for (i in 0 until 5) {
for (j in 0 until 3) {
if (j == 1) {
break@outer
}
}
}
2、集合概述
Kotlin的集合分为可变集合MutableSet(可以添加、删除、修改)和不可变集合Set(只能读取)。Kotlin只提供了HashSet、HashMap、LinkedHashSet、LinkedHashMap、ArrayLis这5个实现类,并且都是可变集合。不可变集合只能通过函数去创建。
3、Set
3.1 声明和创建Set集合
不推荐通过构造器去创建Set集合,推荐使用工具函数去创建。
如下函数可以创建Set集合:
setOf() //返回不可变Set,返回的是LinkedHashSet
mutableSetOf() //返回可变集合,返回的是LinkedHashSet
hashSetOf() //返回可变集合,返回的是HashSet
linkedSetOf() //返回可变集合,返回的是LinkedHashSet
sortedSetOf() //返回可变集合,返回的是TreeSet,集合元素从小到大排列
3.2 遍历Set
可以使用for-in
或者Set#forEach
方法
3.3 增删改查
add(el:E)
addAll(els:Collection)
remove(el:E)
removeAll(els:Collection)
retainAll(els:Collection) //交集
Set和MutableSet都包含一个iterator()方法,但普通的Set返回的Iterator对象只有hasNext()和next()方法;而MutableSet的iterator()方法返回的Iterator对象还提供了一个remove()方法,用于迭代时删除元素
4、List
4.1 声明和创建List
同set,推荐使用工具函数来创建List
listOf() //返回不可变List
listOfNotNull() //返回不可变List,自动去除传入的null
mutableListOf() //返回可变List
arrayList() //返回可变的ArrayList
4.2 相关方法
get() //可以使用[]访问
indexOf()
lastIndexOf()
subList()
5、Map
5.1 声明和创建Map
mapOf() //返回不可变Map
mutableMapOf() //返回可变的Map
hashMapOf() //返回可变的HashMap
linkedMapOf() //返回可变LinkedHashMap
sortedMapOf() //返回可变TreeMap,按照key大小进行排序
5.2 遍历Map
var map = mapOf("a","b","c")
for(en in map.keys){
}
for(en in map.entries){
}
for((key,value) in map){
}
map.forEach({println(it.key+":"+it.value)})