Kotlin之集合类型使用——笔记

Kotlin崛起次世代Android开发(带书签完整版) 下载地址
1.有序可重复–Array数组

  1. 数组从(索引)0开始,以此类推到N。最常使用的集合类型
  2. Array的特点是,大小固定不可变,并且其中元素的类型不可变。
   val nollstations = arrayOf(
        "嘉定北", "徐家汇", "商翔", "桃浦新村", "徐家汇",
        "上海四站", "罗山路", "池士尼", "嘉定新城", "徐家汇", "挑浦新村"
    )
    println(nollstations.first()) //获取数组的第一参数
    println(nollstations.component1()) //获取数组第一个参数
    println(nollstations.component2())//获取数组第二个参数
    println(nollstations.component3())//获取数组第三个参数
    println(nollstations.component4())//获取数组第四个参数
    println(nollstations.component5())//获取数组第五个参数
    println(nollstations.last())//获取数组最后一个参数
    println(nollstations.contains("池士尼"))//数组当中是否包含“池士尼”这个元素
    println(nollstations.find { it.contains("徐") })//查找模式元素当中是否存在“徐”
    println(nollstations.findLast { it.contains("嘉") })//查找模式数组最后元素当中是否存在“嘉”
    println(nollstations.joinToString())  //将整个数组输出一个元素逗号分割形式的字符串,打印出来
    println(nollstations.reversed().joinToString())//将整个数组输出一个元素逗号分割形式的字符串,反序打印出来
    println(nollstations.joinToString { it + "站" })//将整个数组输出一个元素逗号分割形式的字符串,每个元素末尾添加站组合打印出来
    println(nollstations.sortedBy { s -> s.length }) //将整个数组根据元素的长度,从低到高的排序依次,以数组的形式打印出来
    println(nollstations.sortedByDescending { s -> s.length })//将整个数组根据元素的长度,从高到低的排序依次,以数组的形式打印出来
    println(nollstations.maxBy { s -> s.length })//查找数组中元素最长的元素,将其打印出来
    println(nollstations.distinct())//去除数组当中一些重复的元素
    println(nollstations.distinctBy { s -> s.length })//只返回长度不同的一些元素
    println(nollstations.reduce { s1, s2 -> "$s1,$s2" })//将元素以1+2的形式进行组合,从下标0开始
    println(nollstations.reduceRight { s1, s2 -> "$s2,$s1" })//与其上面相反
    println(nollstations.fold("地铁1 1号线站点") { sl, s2 -> "$sl-$s2" })//在数组的起始位置添加 改字符串
    println(nollstations.foldRight("是地铁1 1号线的站点.") { sl, s2 -> "$sl-$s2" })//在数组的末尾位置添加 改字符串
     println(nollstations.sliceArray(2..5).joinToString())//从下标为2至5的位置进行元素打印
    println(nollstations.take(2))//只打印前两位元素
    println(nollstations.takeLast(3))//从最后面开始算,打印最后三位元素
    println(nollstations.drop(3))//去掉前三位元素,打印其余元素
    println(nollstations.dropLast(3))//去掉最后三位元素,打印其余元素

结果:

嘉定北
嘉定北
徐家汇
商翔
桃浦新村
徐家汇
桃浦新村
true
徐家汇
嘉定新城
嘉定北, 徐家汇, 商翔, 桃浦新村, 徐家汇, 上海四站, 罗山路, 池士尼, 嘉定新城, 徐家汇, 桃浦新村
桃浦新村, 徐家汇, 嘉定新城, 池士尼, 罗山路, 上海四站, 徐家汇, 桃浦新村, 商翔, 徐家汇, 嘉定北
嘉定北站, 徐家汇站, 商翔站, 桃浦新村站, 徐家汇站, 上海四站站, 罗山路站, 池士尼站, 嘉定新城站, 徐家汇站, 桃浦新村站
[商翔, 嘉定北, 徐家汇, 徐家汇, 罗山路, 池士尼, 徐家汇, 桃浦新村, 上海四站, 嘉定新城, 桃浦新村]
[桃浦新村, 上海四站, 嘉定新城, 桃浦新村, 嘉定北, 徐家汇, 徐家汇, 罗山路, 池士尼, 徐家汇, 商翔]
桃浦新村
[嘉定北, 徐家汇, 商翔, 桃浦新村, 上海四站, 罗山路, 池士尼, 嘉定新城]
[嘉定北, 商翔, 桃浦新村]
嘉定北,徐家汇,商翔,桃浦新村,徐家汇,上海四站,罗山路,池士尼,嘉定新城,徐家汇,桃浦新村
桃浦新村,徐家汇,嘉定新城,池士尼,罗山路,上海四站,徐家汇,桃浦新村,商翔,徐家汇,嘉定北
地铁1 1号线站点-嘉定北-徐家汇-商翔-桃浦新村-徐家汇-上海四站-罗山路-池士尼-嘉定新城-徐家汇-桃浦新村
嘉定北-徐家汇-商翔-桃浦新村-徐家汇-上海四站-罗山路-池士尼-嘉定新城-徐家汇-桃浦新村-是地铁1 1号线的站点.
商翔, 桃浦新村, 徐家汇, 上海四站
[嘉定北, 徐家汇]
[嘉定新城, 徐家汇, 桃浦新村]
[桃浦新村, 徐家汇, 上海四站, 罗山路, 池士尼, 嘉定新城, 徐家汇, 桃浦新村]
[嘉定北, 徐家汇, 商翔, 桃浦新村, 徐家汇, 上海四站, 罗山路, 池士尼]
[嘉定北map, 徐家汇map, 商翔map, 桃浦新村map, 徐家汇map, 上海四站map, 罗山路map, 池士尼map, 嘉定新城map, 徐家汇map, 桃浦新村map]
[桃浦新村, 桃浦新村]

    val numbers = arrayOf(O, -999, 100, 33, -2, 3000)
    val numbers2 = arrayOf(O, -999, 100, 33, -2, 3000)
    println(numbers.sortedArray().joinToString())//按数字大小进行排列
    println(numbers.sortedArrayDescending().joinToString())//按数字大小进行倒序排列
    println(numbers.map { "数字$it" })//针对数组元素进行转换
    println(numbers.filter { it % 2 == 0 })//针对数组每个元素进行判断
    println(numbers.max())//获取最大值
    println(numbers.min())//获取最小值
    println(numbers.all { it > 0 }) //判断数组里的元素是否全部都大于零,返回 true 或 false
    println(numbers.any { it < 0 }) //与 all相对,只要数组当中有某个元素小于零,返回true或false
    println(numbers.none { it == 0 }) // 但数组所有的元素都不满足条件,返回true 否则 false
    println(numbers.sum()) //计算求和
    println(numbers.sumBy { 10_000 + it }) //增强求和
    println(numbers.average()) //求平均值
    println(numbers.plus(numbers2).joinToString())//将numbers2 数组 追加到 numbers 后面
    println((numbers2 + numbers).joinToString()) //合并两个数组

结果

-999, -2, 26, 33, 100, 3000
3000, 100, 33, 26, -2, -999
[数字26, 数字-999, 数字100, 数字33, 数字-2, 数字3000]
[26, 100, -2, 3000]
3000
-999
false
true
true
2158
62158
359.6666666666667
0, -999, 100, 33, -2, 3000, 0, -999, 100, 33, -2, 3000
0, -999, 100, 33, -2, 3000, 0, -999, 100, 33, -2, 3000

2.可变的列表MutableList
可以随意针对列表增删改查,列表没有限制大小。

 val nollstations = mutableListOf(
        "嘉定北", "徐家汇", "商翔", "桃浦新村", "徐家汇",
        "上海四站", "罗山路", "池士尼", "嘉定新城", "徐家汇", "桃浦新村"
    )

    val newStations = mutableListOf("花桥")
    nollstations.add("嘉定新城") //末尾增加元素
    nollstations.addAll(newStations)//添加序列
    println("nollstations = $nollstations")
    nollstations.remove("嘉定新城")//从第一个元素进行匹配,如果相同进行删除
    println("nollstations = $nollstations")
    nollstations.removeAt(0)//根据列表的index下标,然后进行删除
    println("nollstations = $nollstations")
    nollstations.set(0, "替换徐家汇")//根据列表index下标,进行替换
    nollstations[0] = "替换徐家汇"//根据列表index下标,进行替换
    println("nollstations = $nollstations")
    val subList = nollstations.subList(3, 6)//从下标为4至7的位置进行打印
    println(subList)
    println(subList.map { "ceshi$it" }) //针对列表集合,每个元素进行转换
    println(subList.maxBy { s-> s.length}) //针对列表集合,打印元素最长的那个元素
//    println(nollstations.removeAll(nollstations))//清除所有列表集合元素
    println(nollstations.clear())//清除所有列表集合元素

结果:

nollstations = [嘉定北, 徐家汇, 商翔, 桃浦新村, 徐家汇, 上海四站, 罗山路, 池士尼, 嘉定新城, 徐家汇, 桃浦新村, 嘉定新城, 花桥]
nollstations = [嘉定北, 徐家汇, 商翔, 桃浦新村, 徐家汇, 上海四站, 罗山路, 池士尼, 徐家汇, 桃浦新村, 嘉定新城, 花桥]
nollstations = [徐家汇, 商翔, 桃浦新村, 徐家汇, 上海四站, 罗山路, 池士尼, 徐家汇, 桃浦新村, 嘉定新城, 花桥]
nollstations = [替换徐家汇, 商翔, 桃浦新村, 徐家汇, 上海四站, 罗山路, 池士尼, 徐家汇, 桃浦新村, 嘉定新城, 花桥]
[徐家汇, 上海四站, 罗山路]
[ceshi徐家汇, ceshi上海四站, ceshi罗山路]
上海四站
kotlin.Unit

3.setOf()列表集合
特点是大小固定,元素类型也不可变

 	val mainLine = setOf("迪士尼", "徐家汇", "桃蒲新村", "南翔", "马陆", "嘉定新城")
    val sublineJd = setOf("嘉定新城", "嘉定西", "嘉定北")
    val sublineKs = setOf("嘉定新城", "上海赛车场", "安亭", "花桥")
    //集合数据大小
    println(mainLine.size)
    //集合数据大小
    println(mainLine.count())
    //匹配集合里面是否有参数 返回 true或者false
    println(mainLine.contains("迪士尼"))
    //打印集合元素
    println(mainLine.toTypedArray().joinToString())
    //打印集合元素
    println(mainLine.joinToString())

结果:

6
6
true
迪士尼, 徐家汇, 桃蒲新村, 南翔, 马陆, 嘉定新城
迪士尼, 徐家汇, 桃蒲新村, 南翔, 马陆, 嘉定新城

//匹配mainLine集合是否完全包含sublineJd集合 返回 true或false
    println(mainLine.containsAll(sublineJd))
    println((mainLine + sublineJd).containsAll(sublineJd))
    println((mainLine + sublineJd).containsAll(mainLine))
    //查询两个集合中交集的部分
    println(mainLine.intersect(sublineJd))
    println(mainLine.intersect(sublineKs))
    println(sublineJd.intersect(sublineKs))

结果:

false
true
true
[嘉定新城]
[嘉定新城]
[嘉定新城]

     //排除一个集合与另一个集合交集部分
    println(mainLine.subtract(sublineJd))
    println(mainLine.subtract(sublineKs))
    println(sublineJd.subtract(sublineKs))
	//合并两个集合
    println(mainLine.union(sublineJd).union(sublineKs))

    //算出主线分别于两条支线的补集
    println(mainLine.union(sublineJd) - mainLine.intersect(sublineJd))
    println(mainLine.union(sublineKs) - mainLine.intersect(sublineKs))

结果:

[迪士尼, 徐家汇, 桃蒲新村, 南翔, 马陆]
[迪士尼, 徐家汇, 桃蒲新村, 南翔, 马陆]
[嘉定西, 嘉定北]
[迪士尼, 徐家汇, 桃蒲新村, 南翔, 马陆, 嘉定新城, 嘉定西, 嘉定北, 上海赛车场, 安亭, 花桥]
[迪士尼, 徐家汇, 桃蒲新村, 南翔, 马陆, 嘉定西, 嘉定北]
[迪士尼, 徐家汇, 桃蒲新村, 南翔, 马陆, 上海赛车场, 安亭, 花桥]

4.MutableSet
与MutableList相似,特点是大小可变,类型不可变。

	val mainLine = setOf("迪士尼", "徐家汇", "桃蒲新村", "南翔", "马陆", "嘉定新城")
    val sublineJd = setOf("嘉定新城", "嘉定西", "嘉定北")
    val sublineKs = setOf("嘉定新城", "上海赛车场", "安亭", "花桥")
    val newsLines = setOf("麒麟路", "墨水湖北路")
    
    //将setOf转变为MutableSet
    val mnutableMainline = mainLine.union(sublineJd).union(sublineKs).toMutableSet()

    //末尾添加一个元素
    mnutableMainline.add("归山北麓")
    println(mnutableMainline)
    //添加一个setOf集合
    mnutableMainline.addAll(newsLines)
    println(mnutableMainline)
    //在集合里面查找是否相同的元素进行删除
    mnutableMainline.remove("归山北麓")
    println(mnutableMainline)
    //针对每个元素的长度,是否符合大于2的条件,进行打印
    println(mnutableMainline.filter { it.length > 2 }.joinToString())
    //针对每个元素进行二次 更改
    println(mnutableMainline.joinToString { "$it map" })
    //跳过前两位元素
    println(mnutableMainline.drop(2).joinToString())
    //只打印前2位元素
    println(mnutableMainline.take(2).joinToString())

[迪士尼, 徐家汇, 桃蒲新村, 南翔, 马陆, 嘉定新城, 嘉定西, 嘉定北, 上海赛车场, 安亭, 花桥, 归山北麓]
[迪士尼, 徐家汇, 桃蒲新村, 南翔, 马陆, 嘉定新城, 嘉定西, 嘉定北, 上海赛车场, 安亭, 花桥, 归山北麓, 麒麟路, 墨水湖北路]
[迪士尼, 徐家汇, 桃蒲新村, 南翔, 马陆, 嘉定新城, 嘉定西, 嘉定北, 上海赛车场, 安亭, 花桥, 麒麟路, 墨水湖北路]
迪士尼, 徐家汇, 桃蒲新村, 嘉定新城, 嘉定西, 嘉定北, 上海赛车场, 麒麟路, 墨水湖北路
迪士尼 map, 徐家汇 map, 桃蒲新村 map, 南翔 map, 马陆 map, 嘉定新城 map, 嘉定西 map, 嘉定北 map, 上海赛车场 map, 安亭 map, 花桥 map, 麒麟路 map, 墨水湖北路 map
桃蒲新村, 南翔, 马陆, 嘉定新城, 嘉定西, 嘉定北, 上海赛车场, 安亭, 花桥, 麒麟路, 墨水湖北路
迪士尼, 徐家汇

猜你喜欢

转载自blog.csdn.net/u013290250/article/details/84861212
今日推荐