首页 > 其他分享 >kotlin集合操作——list set map

kotlin集合操作——list set map

时间:2023-03-09 19:57:48浏览次数:28  
标签:map set val kotlin list value println

简述

  kotlin有三个集合类型——list set map,kotlin标准库提供了一整套用于管理集合的工具

  这些集合接口与相关函数位于 kotlin.collections 包中

  kotlin的集合分为可变集合类Mutable和不可变集合类Immutable,List、Set、Map都是不可变集合,与之对应MutableList、MutableSet、MutableMap是可变集合

创建集合

  使用 listOf()、setOf()、mapOf() 创建不可变的 List、Set、Map

  使用 mutableListOf()、mutableSetOf()、mutableMap() 创建可变的 MutableList 、MutableSet 、MutableMap

  注意这里的to代表连接一个键值对,to前面是键,后面是值,set的默认实现是 LinkedHashSet

val list = listOf(1, 2, 3, 4, 5) 
val mutableList = mutableListOf("a", "b", "c")  

val set = setOf(1, 2, 3, 4, 5)
val mutableSet = mutableSetOf("a", "b", "c") 

val map = mapOf(1 to "a", 2 to "b", 3 to "c")
val mutableMap = mutableMapOf(1 to "X", 2 to "Y", 3 to "Z")

遍历集合

  我们可以使用forEach遍历集合,其中map的遍历可通过it.key和it.value来获取键和值

list.forEach {
     println(it)
}

set.forEach {
     println(it)
}

map.forEach {
     println("K = ${it.key}, V = ${it.value}")
}

  若想在遍历的同时获取当前元素的下标,我们可以使用forEachIndexed方法

list.forEachIndexed { index, value -> 
     println("list index = ${index}, value = $value")
}

set.forEachIndexed { index, value ->
    println("set index = ${index}, value = ${value}")
}

添加元素

  对于list,我们可以使用add方法添加元素,参数为一个时往list的末尾添加,两个参数时为往指定的index添加

val list = mutableListOf<Number>(1,2,3)
list.add(4)
list.forEach {
    print("$it ") // 1 2 3 4
}
println()
list.add(3,-1)
list.forEach {
    print("$it ") // 1 2 3 -1 4
}

  对于set,使用add方法添加元素,注意set是去重的

val set = mutableSetOf<Number>(1,2,3)
set.add(4)
set.forEach{
    println(it)
}

  对于map,可以使用put方法添加,更常见的是使用中括号+等于的形式,括号内是键名,等号是值

val map = mutableMapOf<Number,String>(1 to "a",2 to "b")
//map.put(3,"c")
map[3]="c"
map.forEach{
    println("${it.key}  ${it.value}")
}

删除元素

  list使用remove(value)删除值为value的元素,使用removeAt(index)删除指定下标元素

  removeFirst()和removeLast()删除第一个和最后一个元素

val list = mutableListOf<Number>(10, 20, 30, 40, 50, 60, 70)
list.remove(10) //  20, 30, 40, 50, 60, 70
list.removeAt(2) //  20, 30, 50, 60, 70
list.removeFirst() // 30, 50, 60, 70
list.removeLast() // 30, 50, 60

  set的remove删除指定值的元素

val set = mutableSetOf<Number>(10, 20, 30, 40)
set.remove(20) // 10 30 40

  map使用remove删除元素,remove传入想删除的键值

val map = mutableMapOf<Number,String>(1 to "a",2 to "b")
map.remove(2)
map.forEach{
    println("${it.key} ${it.value}") // 1 a
}

list集合相关操作

按索引取元素

  list本质就可以理解为一个变长数组,最简单的就是像数组一样通过[]拿到值

val numbers = listOf(1, 2, 3, 4)
println(numbers.get(0))
println(numbers[0])
//numbers.get(5)                         // exception!
println(numbers.getOrNull(5))             // null
println(numbers.getOrElse(5, {it}))        // 5

取列表的一部分

  使用subList可以指定左闭右开的区间,取出list的一部分

val numbers = (0..13).toList()
println(numbers.subList(3, 6))

排序

  对于普通的基本类型,可以直接调用sort()和sortDescending()进行升序和降序排列

val list = mutableListOf(5,4,1,2,3,7,10)
list.sort() //按升序排序
list.sortDescending() //降序

  sort()和sortDescending()加上ed变成sorted()和sortedDescending()则是返回一个全新的排序后的list,原来的list不变

  我们还可以使用sortBy()方法进行排序,传入的参数是一个selector

References

https://www.kotlincn.net/docs/reference/collections-overview.html

https://juejin.cn/post/6957922140767125517

https://www.kotlincn.net/docs/reference/collection-ordering.html

https://developer.android.com/codelabs/basic-android-kotlin-compose-collections?hl=zh-tw#0

 

标签:map,set,val,kotlin,list,value,println
From: https://www.cnblogs.com/CNLayton/p/17199397.html

相关文章

  • JDK 7 HashMap 并发情况下的死锁问题
    链表的头插法,了解一下这个博客目录问题描述详细解释问题描述JDK7的HashMap解决冲突用的是链表,在插入链表的时候用的是头插法,每次在链表的头部插入新元素。res......
  • HashMap 初始化容量设置多少合适
    HashMap中将要存放的KV个数的时候,设置一个合理的初始化容量可以有效的提高性能初始化集合时,阿里巴巴的开发手册当中也推荐指定容量HashMap默认初始容量:16(即2<<3)Has......
  • java hashMap集合存储arrayList元素并遍历
        ......
  • 深入认识setState
    深入认识React类组建修改状态-setStatesetState,它对状态的改变,可能是异步的;如果改变状态的代码处于HTML元素事件中,则其是异步的,否则是同步如果遇到某个事件中,需要同步......
  • java 集合嵌套之ArrayList嵌套HashMap
       ......
  • 1. 两数之和 unordered_map使用
    https://leetcode.cn/problems/two-sum/ 给定一个整数数组nums 和一个整数目标值target,请你在该数组中找出和为目标值target 的那 两个 整数,并返回它们的数组......
  • mybatis02_Mapper代理开发
    1、创建项目并添加依赖、连接数据库,编写mybatis的配置文件项目结构如下所需依赖如下(创建的是聚合工程,请根据自己的是实际情况选择合适的版本)<properties><ma......
  • ES6-ES11 class中getter和setter设置
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>get和......
  • ES6-ES11 Map的介绍与API
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>Map</t......
  • 获取元素到body顶部的距离,offsetTop和offsetParent,getBoundingClientRect
    最近在写一个可见曝光的sdk,是当元素显示在可见区域的时候才算作曝光,并上报给服务端。思路是在元素请求回来并渲染完成之后,计算元素距离document顶部的距离offset,当页面滚动......