Kotlin学习笔记--Kotlin之集合
集合类
集合类是一种数据结构。
Kotlin中的集合类分为可变集合类和不可变集合类,主要类型为:list,set,map
1. List 集合
List继承与Collection接口,主要特征是以线性存储,没有特定顺序,集合中可以存放重复对象。
Kotlin中的List分为不可变集合类List(ReadOnly) 和可变集合类MutableList(W&R)
1.1 不可变list
不可变List不提供set、add等对list内容进行操作的方法,如果调用list.set方法,编译器会直接报错。
我们可以通过list.of方法来创建一个不可变List,如果创建的是一个空list,则必须声明变量的类型。
list根据索引取值,在java中我们使用list.get(index)方法,在Kotlin中,我们可以使用同样的方法,不过编译器会建议使用更简洁的方法,类似于数组的取值list[index]来取对应值。
fun testList(){
//创建一个空的list
val list1:List<String> = listOf()
Log.d(TAG,"list1.size:${
list1.size}")
Log.d(TAG,"list1.class:${
list1::class.java}")
val list2 = listOf("1")//一个元素 list2 List<String>
Log.d(TAG,"list2.size:${
list2.size}")
Log.d(TAG,"list2.class:${
list2::class.java}")
val list3 = listOf("K","O","T","L","I","N",1,2,3)//多个元素 list3 List<Any>
Log.d(TAG,"list3.size:${
list3.size}")
Log.d(TAG,"list3.class:${
list3::class.java}")
Log.d(TAG,"list3[1]$list3[1]")
Log.d(TAG,"list3[1]${
list3.get(1)}")
println(list3)
//D/CollectionTest: list1.size:0
//D/CollectionTest: list1.class:class kotlin.collections.EmptyList
//D/CollectionTest: list2.size:1
//D/CollectionTest: list2.class:class java.util.Collections$SingletonList
//D/CollectionTest: list3.size:9
//D/CollectionTest: list3.class:class java.util.Arrays$ArrayList
//I/System.out: [K, O, T, L, I, N, 1, 2, 3]
//D/CollectionTest: list3[1]O
//D/CollectionTest: list3[1]O
}
1.2 可变list MutableList
在MutableList中,除了List的基本函数外,添加了add,remove,set,clear,retaionAll等等修改List的操作函数。
我们可以通过mutableListOf方法来创建一个可变的list。
val mList1 = mutableListOf("1","2","Kotlin")//声明一个可变的集合
mList1.clear()
Log.d(TAG,"mList1$mList1")
val mList2 = mutableListOf("1","2","Kotlin","23","456","2")
Log.d(TAG,"mList2$mList2")
val result = mList2.retainAll(mutableListOf("1","Kotlin","retain"))//取两个集合的交集,并赋给mList2
Log.d(TAG,"result$result")
Log.d(TAG,"mList2$mList2")
//D/CollectionTest: mList1[]
//D/CollectionTest: mList2[1, 2, Kotlin, 23, 456, 2]
//D/CollectionTest: resulttrue
//D/CollectionTest: mList2[1, Kotlin]
同时我们可以将一个不可变的集合转换成一个可变集合
val list = listOf("pig","panda","dog")
val mlist3 = list.toMutableList()
mlist3[2] = "monkey"
mlist3.add("chicken")
Log.d(TAG,"mlist3:$mlist3")
//D/CollectionTest: mlist3:[pig, panda, monkey, chicken]
1.3 集合遍历
可以使用Iterator迭代器来遍历集合,也可以用forEach来遍历集合,当然,我们也可以用for循环
val list = mutableListOf("k", "a", "b", "d")
val iterator = list.iterator()
while (iterator.hasNext()) {
Log.d(TAG, "list:${
iterator.next()}")
}
//D/CollectionTest: list:k
//D/CollectionTest: list:a
//D/CollectionTest: list:b
//D/CollectionTest: list:d
val list2 = mutableListOf<Char>()
for (a in 'a'..'z') {
list2.add(a)
}
Log