Kotlin --数据容器
Kotlin 的数据容器分为 数组 和 集合。
其中 集合分为 集合Set 、队列List 、映射Map 等三种集合,每种又包括只读和可变两种类型。
这是为了判断该容器是否能进行增删改查等操作。
数组
数组是一种在初始化时就指定容器大小,不可以动态调整其大小的容器。元素按顺序存储在一段连续的内存段上。
数组的创建
arraysOf 创建数组
创建一个数组并传值给他, 元素的类型可以不同
val arrayNumber : Array<Int> = arrayOf(1,2,3,4)
val arrayAny : Array <Any> = arrayOf(1 , false , "aa" , 3.6)
arrayOfNulls 创建数组
创建一个指定容量大小的元素均为控的数组, 该数组的类型必须确定
val arrayOfNulls : Array<String ? > = arrayOfNulls<String>(5)
arrayOfNulls[0] = "str1"
arrayOfNulls[1] = "str2"
arrayOfNulls[2] = "str3"
arrayOfNulls[3] = "str4"
arrayOfNulls[4] = null
动态创建数组
用接受数组大小以及一个方法参数的 Array 构造方法,用作参数的方法能够返回给定索引的每个元素初始值:
val intArray1 = Array(5){
it * 2
}
原生类型数组
在Kotlin中也有无装箱开销的专门的类来表示原生类型数组:
原生类型数组 | 解释 |
---|
ByteArray | 字节型数组 | ShortArray | 短整型数组 | IntArray | 整型数组 | LongArray | 长整型数组 | BooleanArray | 布尔型数组 | CharArray | 字符型数组 | FloatArray | 浮点型数组 | DoubleArray | 双精度浮点型数组 |
IntArray函数
val intArray2 = IntArray(5)
val intArr2 = IntArray(5) { 0 }
val intArr3 = IntArray(5) {
it * 2
}
关于数组的方法
只有获取长度跟Java不同,其他方法均一样。
val len = intArr2.size
println(len)
遍历数组
val intArr2 = IntArray(5) { 0 }
for (item in intArr){
println(item)
}
intArr.forEach {
println("$it ")
}
tips:
关于 IntArray 和 arrayOf 有什么区别
intArrayOf 强调的是int ,类似 java中的int[] ,所以其中的参数不可为null arrayOf 类似 java 中的Integer[] ,所以可以在其中赋值null kotlin 中数组不能直接赋值给可变形参vararg ,需要通过关键字*
集合
集合分为可变集合,显而易见,是指集合创建完成之后,可以对集合进行增删改查操作
不可变集合,显而易见,是指指集合创建完成之后,不能对集合进行增删改查操作,会抛异常
数组创建方式 | 示例 | 说明 | 是否可变 |
---|
arrayListOf() mutableListOf 相同元素类型的队列 | val array = arrayListOf(1, 2, 3) val array = mutableListOf() | - 必须指定元素类型 | 可变 | listOf() 相同元素类型的集合 | val array = listOf(1, 2, 3) | - 必须指定元素类型 - 必须指定初始化数据元素 | 不可变 | arrayMapOf<K,V>() mutableMapOf<K,V> 相同元素类型的字典 | val array= arrayMapOf(Pair(“key”,“value”)) val array= mutableMapOf() | - 初始元素使用Pair包装 | 可变 | mapOf() 相同元素类型的字典 | val array= mapOf(Pair(“key”,“value”)) | - 元素使用Pair包装 - 必须指定初始元素 | 不可变 | arraySetOf() mutableSetOf 相同元素类型的集合 | val array= arraySetOf(1,2,3) val array= mutableSetOf() | - 会对元素自动去重 | 可变 | setOf() 相同元素类型的集合 | val array= arraySetOf(1,2,3) | - 对元素自动去重 - 必须指定元素类型。 | 不可变 |
List队列
队列是一种按照顺序排列的,它与集合的最大区别,便是多了个次序管理。
不可变队列
val arrString = listOf<String>("a", "b" , "c")
可变队列
val arrList : MutableList<String> = mutableListOf<String>()
arrList.add("ss");
arrList.add("aa")
arrList.add("bb")
arrList.add(1 , "qq")
mutable 意味可变的 ,作为前缀。
Set集合
- 其内的元素不按顺序排列。
- 唯一性,若出现相同的元素,则将覆盖。
不可变集合:
val arrSet1 = setOf<String>("a" , "b" )
可变集合:
val arrSet : MutableSet<String> = mutableSetOf()
arrSet.add("a")
arrSet.add("b")
arrSet.add("b")
val iterator = arrSet.iterator()
iterator.forEach {
println("item : $it")
}
Map字典
其内部以键值对 的方式储存 , (key - value)。元素的键与值是一一对应的关系,相同的键名指向的值对象是唯一的,所以映射中每个元素的键名各不相同,这个特性使得映射的变更操作与队列存在以下不同之处(注意增删操作必须由MutableMap来完成):
不可变字典
val arrMap1 = mapOf<String , Int>("a" to 1 , "b" to 2)
可变字典
val arrMap : MutableMap<String , Int> = mutableMapOf()
arrMap["a"] = 1
arrMap["b"] = 2
方法
增删改查
val strList = mutableListOf<String>()
strList.add("aa")
strList.add("bb")
strList.add("cc")
strList.remove("bb")
strList.removeAt(1)
strList.set(0 , "dd")
strList.get(0)
strList.forEach{
print("$it ")
}
排序…
val arrList1 :MutableList<Int> = mutableListOf(3,6,2,1,4,5,2,0)
arrList1.sort()
for (item in arrList1){
print("$item ")
}
arrList1.sortDescending()
arrList1.forEach{
print("$it ")
}
参考:https://www.songyubao.com/book/primary/kotlin/kotlin-lambda.html
|