1.在Kotlin中可以通过以下方式创建ArrayList、LinkedList、HashSet、HashMap等。
- val arrayList = ArrayList<String>()
- val linkedList = LinkedList<String>()
- val hashSet = HashSet<String>()
- val hashMap = HashMap<String,Int>()
2.除了上面的方式,Kotlin还提供了其他创建集合的方法。
1)创建不可变集合。
之所以是不可变的,是因为Kotlin针对这种方式创建的集合,不提供set,remove,add的方法。只提供了get方法。
- val list = listOf<Int>(1, 2, 3)
- val set = setOf<Int>(1, 2, 3)
- val map = mapOf(1 to "Jack", 2 to "Rose")
2)创建可以变集合。通过mutable创建的集合就是可变集合,可以对集合进行add set remove操作。
- val mutableList = mutableListOf<Int>(1, 2, 3)
- val mutableSet = mutableSetOf<Int>(1, 2, 3)
- val mutableMap = mutableMapOf(1 to "Jack", 2 to "Rose")
3.对List的操作。
- val list = listOf<Int>(1, 2, 3)
- //通常get的方式
- println(list.get(1))
- //之所以能使用[]类似数组的方式获取,是因为做了[]运算符重载,后面会讲到。
- println(list[1])
- //角标越界不会抛出异常,而是返回一个null
- println(list.getOrNull(3))
- //通过?:空合并操作符,?:左边的值为空,则返回右边的值
- println(list.getOrNull(3) ?: -1)
- //如果角标越界,不会抛出异常。而是返回{}lambda表达式中的值
- println(list.getOrElse(3) { -1 })
1)通常通过get(index)来获取:
list.get(1)
2)也可以通过[index],像操作数组那样获取。之所以可以用[]来获取,是因为做了运算符重载。
list[1]
3)getOrNull,如果发生角标越界,不会抛出异常而是返回null。可以和?:空合并操作符结合起来使用,返回一个默认值。?:左边的值为空,则返回右边的值
list.getOrNull(3)
list.getOrNull(3) ?: -1
4)getOrElse接收两个参数,第一个索引值,第二个lambda表达式。如果角标越界,不会抛出异常,而是返回lambda表达式中的值。
list.getOrElse(3) { -1 }
5)可变集合:
val mutableList = mutableListOf<Int>(1, 2, 3)
set操作
- mutableList.set(1,2)
- mutableList[1] = 2
add操作
- mutableList.add(4)
- mutableList += 5
remove操作 :-=运算符重载,删除的是元素的值
- mutableList -= 5
- mutableList.remove(5)
removeIf 接收一个lambda表达式,可以根据表达式中的条件进行删除。
mutableList.removeIf { it == 4 }
mutableList.removeIf { it.contains("H")}
6)List集合的遍历
可以用in遍历。
forEach 接收一个lambda表达式,会把集合中的元素传进来。
forEachIndexed接收一个lambda表达式,有两个参数,一个是index另外一个是对应的value
- for (item in list) {
- println(item)
- }
-
- list.forEach {
- println(it)
- }
- list.forEachIndexed { index, value ->
- println("$index , $value")
- }
4.list集合的解构:
可以通过_过滤掉不想要的元素。
val (first:Int,second:Int,third:Int) = listOf<Int>(1, 2, 3)
- val (first: Int, _, third: Int) = listOf<Int>(1, 2, 3)
- println("$first $third")
5.set集合
1)set的获取方式和list类似
- val set = setOf<Int>(1, 2, 3)
-
- set.elementAt(1)
- set.elementAtOrElse(1) { -1 }
- set.elementAtOrNull(1)
2)可变set集合
- val mutableSet = mutableSetOf<Int>(1, 2, 3)
-
- mutableSet += 4
- mutableSet -= 2
- mutableSet.remove(3)
- mutableSet.removeIf { it==4 }
3)list和set相互转换
list转为set,可以去除重复元素。set中是不允许重复的。
- val list = mutableSet.toList();
- val set = mutableList.toSet();
6.数组类型
- //ByteArray
- val byteArray = byteArrayOf(1,2,3)
- //IntArray
- val array = intArrayOf(1, 2, 3)
- //CharArray
- val charArray = charArrayOf('a','b','c')
7.map集合
1)map集合的创建
Pari对象,存放的就是key value
val map = mapOf(Pair(1, "HanMei"), Pair(2, "LiLei"))
to看起来像一个关键子,其实to是一个函数。这种写法,后面会讲到。
val map = mapOf(1 to "HanMei", 2 to "LiLei")
创建可变map
val mutableMap = mutableMapOf(1 to "HanMei", 2 to "LiLei")
2)map的get操作
- println(map[1])
- println(map.getValue(1))
-
- println(map.getOrDefault(1, "Default"))
- println(map.getOrElse(1) { "default" })
3)map的遍历
- map.forEach {
- println("%$it.key , ${it.value}")
- }
-
- map.forEach { (key, value) -> println("$key ,$value") }
4)可变map的增删改
- val mutableMap = mutableMapOf(1 to "HanMei", 2 to "LiLei")
-
- mutableMap += 3 to "XiaoHua"
- mutableMap.put(4, "XiaoHua")
- mutableMap.getOrPut(5) { "XiaoHua" }
- val getValue:()->String = {
- "value"
- }
- mutableMap.getOrPut(5) {getValue()}