Kotlin 进阶之路2 区间与集合类型
1.区间(Range)
一个数学上的概念,表示范围
ClosedRange的子类,IntRange最常用
基本写法:
- 0..100表示[0,100] - 0 until 100 表示[0,100) - i in 0..100 判断i是否在区间[0,100]中 复制代码
val range: IntRange = 0..1024 //[0,1024]---闭区间 val range_exclusive: IntRange = 0 until 30 //[0,30)---半闭区间 val emptyRange: IntRange = 0..-1 fun main(args: Array<String>) { println(emptyRange.isEmpty()) println(range.contains(100)) println(50 in range) for (i in range_exclusive) { print("$i ") } } 复制代码
true true true 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 复制代码
2.数组类型
基本写法:
- val array:Array<String> = arrayOf(...) 复制代码
基本类型的数组
为了避免不必要的装箱费和拆箱,基本类型的数组是定制的
Java | Kotlin |
---|---|
int[] | IntArray |
short[] | ShortArray |
long[] | LongArray |
float[] | FloatArray |
double[] | DoubleArray |
char[] | CharArray |
基本操作
- print array[i] 输出第i个元素 - array[i] = "Hello" 给第i个成员赋值 - array.length 数组的长度 复制代码
val arrayOfInt: IntArray = intArrayOf(1, 2, 3, 4, 5, 6, 7) val arrayOfChar: CharArray = charArrayOf('H', 'e', 'l', 'l', 'o', ',', 'W', 'o', 'r', 'l', 'd', '!') val arrayOfString:Array<String> = arrayOf("你好","美女") fun main(args: Array<String>) { println(arrayOfInt.size) for (i in arrayOfInt){ println(i) } println(arrayOfInt.slice(2..4)) println(arrayOfChar.joinToString()) println(arrayOfChar.joinToString("")) println(arrayOfString[0]) arrayOfString[1] ="帅哥" println(arrayOfString[1]) } 复制代码
1 2 3 4 5 6 7 [3, 4, 5] H, e, l, l, o, ,, W, o, r, l, d, ! Hello,World! 你好 复制代码
/** *集合类型 * * 同类型的值的组合,根据整体特性分: * 1.有序可重复 - Array ,索引从0开始(index,i) * 2.无序不重复 - set * 3.无序可重复 - Map ,有唯一的键(key) * */ fun main(args: Array<String>) { //Array: Array<类型> 或arrayOf(元素一、元素二、元素三,...元素三) var country = arrayOf("China", "Japan", "American", "Germany", "China", "China") for (s in country) { println(s) } //创建一个有默认值的数组,Array(计算,{默认值}) println("----------------创建一个有默认值的数组----------------") var countryPlaceHolder = Array(5, { "Australian" }) for (s in countryPlaceHolder) { println(s) } //创建1到10的数组:Array(10,{i -> i+1}) //i代表元素的索引值,从0开始 println("----------------创建1到10的Array数组----------------") var oneToTen = Array(10, { i -> i + 1 }) for (i in oneToTen) { println(i) } //元素计数:count,空否:isEmpty() println("元素计数:" + oneToTen.count()) println("元素是否为空:" + oneToTen.isEmpty()) //获取其中元素:数组名{索引},首元素:数组名.frist,尾元素:数组名.last //获取前5各元素的快捷方法.compoent 1到5 println("${oneToTen.component1()},${oneToTen.component2()}") println("获取第三个元素" + oneToTen[2]) println("获取最后一个元素" + oneToTen.last()) //获取筛选重复后的数组:.distinct() 或用.toSet()转换为set。 println("----------------获取筛选重复后的数组----------------") val countryNotRepeat = country.distinct() for (i in countryNotRepeat) { println(i) } println("----------------获取筛选重复后的set----------------") val countryNotRepeat2 = country.toSet() for (i in countryNotRepeat2) { println(i) } //切割数组:sliceArray println("----------------切割数组:sliceArray----------------") val countrySlice = country.sliceArray(2..3) for (s in countrySlice) { println(s) } //mutableList:MutableList<类型>或mutableListOf(元素1,元素2,...,元素n) //大小可变,类型不可变 println("----------------新建mutableList----------------") var mutableCountry = mutableListOf("China", "Japan", "American", "Germany", "China", "China") for (s in mutableCountry) { println(s) } println("----------------移除首位置元素----------------") mutableCountry.removeAt(0) for (s in mutableCountry) { println(s) } //在末尾增加元素:add元素,添加另一个数组addAll方法 println("----------------add添加元素----------------") mutableCountry.add("Korea") for (s in mutableCountry) { println(s) } val newCountry = arrayOf("Britain", "France") println("----------------整体添加元素----------------") mutableCountry.addAll(newCountry) for (s in mutableCountry) { println(s) } println("----------------移除新加的数组元素----------------") mutableCountry.removeAll(newCountry) for (s in mutableCountry) { println(s) } println("----------------获取筛选重复后的mutableList----------------") for (s in mutableCountry.distinct()) { println(s) } } 复制代码
China Japan American Germany China China ----------------创建一个有默认值的数组---------------- Australian Australian Australian Australian Australian ----------------创建1到10的Array数组---------------- 1 2 3 4 5 6 7 8 9 10 元素计数:10 元素是否为空:false 1,2 获取第三个元素3 获取最后一个元素10 ----------------获取筛选重复后的数组---------------- China Japan American Germany ----------------获取筛选重复后的set---------------- China Japan American Germany ----------------切割数组:sliceArray---------------- American Germany ----------------新建mutableList---------------- China Japan American Germany China China ----------------移除首位置元素---------------- Japan American Germany China China ----------------add添加元素---------------- Japan American Germany China China Korea ----------------整体添加元素---------------- Japan American Germany China China Korea Britain France ----------------移除新加的数组元素---------------- Japan American Germany China China Korea ----------------获取筛选重复后的mutableList---------------- Japan American Germany China Korea 复制代码
3.Set集合
/** * 集合类型 Set:无序不重复 * 主要方法 交差并补 * */ fun main(args: Array<String>) { //Set<类型> 或 setOf(元素1,元素2,...,元素n) //大小不固定,元素类型不可变 val country = setOf("Britain", "France", "China", "Japan", "American", "Germany") val countryAsia = setOf("China", "Japan", "Korea", "Vietnam") val countryPermanent = setOf("American", "China", "France", "Britain", "Russia") for (s in country) { println(s) } //元素计数:count(),空否:isEmpty() println("元素计数:" + country.count()) //检查是否包含某个元素:contains,包含另一个set:containAll println("否包含China元素:" + country.contains("China")) //转换成数组:toTypedArray() println("----------------转换成数组:toTypedArray()----------------") val array = country.toTypedArray() for (s in array) { println(s) } //结合之间的运算:intersect/subtract/union/minus(补集的被操作对象无需是Set类型) println("----------------集合交集数据:intersect----------------") val interCountry = country.intersect(countryAsia) for (s in interCountry) { println(s) } println("----------------集合差集数据:subtract----------------") val subtractCountry = country.subtract(countryAsia) for (s in subtractCountry) { println(s) } println("----------------集合并集数据:union----------------") val unionCountry = country.union(countryAsia).union(countryPermanent) for (s in unionCountry) { println(s) } println("----------------集合补集数据:minus----------------") val minusCountry = country.minus(countryAsia) for (s in minusCountry) { println(s) } //MutableSet<类型>或mutableSetOf(元素1,元素2,...,元素n) //大小可变,类型不可变 val mutableCountry = country.union(countryAsia).toMutableSet() println("----------------MutableSet----------------") for (s in mutableCountry) { println(s) } println("----------------MutableSet添加数据:add----------------") mutableCountry.add("Thailand") for (s in mutableCountry) { println(s) } println("----------------MutableSet添加集合数据:addAll----------------") val newCountry = setOf("Brazil","Mexico") mutableCountry.addAll(newCountry) for (s in mutableCountry) { println(s) } println("----------------MutableSet移除数据:remove----------------") //移除元素:remove,移除另一集合:removeAll mutableCountry.remove("Thailand") for (s in mutableCountry) { println(s) } println("----------------MutableSet移除集合数据:removeAll----------------") //移除集合元素:removeAll,移除另一集合:removeAll mutableCountry.removeAll(newCountry) for (s in mutableCountry) { println(s) } } 复制代码
Britain France China Japan American Germany 元素计数:6 否包含China元素:true ----------------转换成数组:toTypedArray()---------------- Britain France China Japan American Germany ----------------集合交集数据:intersect---------------- China Japan ----------------集合差集数据:subtract---------------- Britain France American Germany ----------------集合并集数据:union---------------- Britain France China Japan American Germany Korea Vietnam Russia ----------------集合补集数据:minus---------------- Britain France American Germany ----------------MutableSet---------------- Britain France China Japan American Germany Korea Vietnam ----------------MutableSet添加数据:add---------------- Britain France China Japan American Germany Korea Vietnam Thailand ----------------MutableSet添加集合数据:addAll---------------- Britain France China Japan American Germany Korea Vietnam Thailand Brazil Mexico ----------------MutableSet移除数据:remove---------------- Britain France China Japan American Germany Korea Vietnam Brazil Mexico ----------------MutableSet移除集合数据:removeAll---------------- Britain France China Japan American Germany Korea Vietnam 复制代码
4.Map集合
/** * 集合类型 Map :无序可重复,类似于"字典"的意思 * * */ fun main(args: Array<String>) { //mapOf<Key,Value>(Pair(key,value),...) //显示指定类型,可防止初始化值类型的错误 val products = mapOf<String, String>(Pair("IPhone", "6888"), Pair("Xiaomi", "3499"), Pair("Huawei", "5999")) //元素计数:size,空否:isEmpty println("元素计数:" + products.size) //获取某个key对应的value:get,getOrDefalt println("获取某个key对应的value:" + products.get("IPhone")) println("获取某个key对应的value,给定默认值:" + products.getOrDefault("ZTE", "0")) println("----------------获得map所有的key:keys----------------") //返回所有的key:keys,所有的value:values for (key in products.keys) { println(key) } println("----------------获得map所有的value:values----------------") for (value in products.values) { println(value) } //mutableMapOf<Key,Value>(Pair(key,value),...) val mutableProducts = products.toMutableMap() println("----------------获得map所有的value:values----------------") //添加或更新:下标方法 map变量名[key] = value mutableProducts["IPhone"]="7999" mutableProducts["Xiaomi"]="1999" for (mutableProduct in mutableProducts) { println("${mutableProduct.key},"+"${mutableProduct.value}") } println("----------------移除元素:remove----------------") //移除元素:remove mutableProducts.remove("IPhone") for (mutableProduct in mutableProducts) { println("${mutableProduct.key},"+"${mutableProduct.value}") } println("----------------添加元素:put----------------") //添加元素:remove mutableProducts.put("Samsung","6999") for (mutableProduct in mutableProducts) { println("${mutableProduct.key},"+"${mutableProduct.value}") } } 复制代码
元素计数:3 获取某个key对应的value:6888 获取某个key对应的value,给定默认值:0 ----------------获得map所有的key:keys---------------- IPhone Xiaomi Huawei ----------------获得map所有的value:values---------------- 6888 3499 5999 ----------------获得map所有的value:values---------------- IPhone,7999 Xiaomi,1999 Huawei,5999 ----------------移除元素:remove---------------- Xiaomi,1999 Huawei,5999 ----------------添加元素:put---------------- Xiaomi,1999 Huawei,5999 Samsung,6999
作者:冬日毛毛雨
链接:https://juejin.cn/post/7025217375381225480