Kotlin数据容器基础-集合

本文介绍了Kotlin中的集合基础,包括可变与不可变的List、Map和Set的创建方法,以及常见操作如增加元素、删除元素、列表变换和排序。对于Map,还讲解了可变与不可变的创建方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天学习集合。在Kotlin中集合,分为不可变集合,以及可变集合,其中可变集合是一种可以动态改变大小的数据结构。
常用的集合有三种

  • List: 有序列表,和数组类似,可以通过下标来访问元素。但是列表的大小可以动态更改
  • Set: 唯一元素的集合,Set中不包含重复的对象,同时Set是无序的。
  • Map:(字典)是一组键值对 (Key-Value Pair),Key是唯一的,Value可以重复。

1. 创建集合

有的集合类型是可变的,在创建后还可以对其进行增删操作,另外还有不可变的集合。

1.1 创建可变列表

  • 必须指定元素类型
val arr1 = mutableListOf<Int>(1,2,3)  //设置初始值
val arr2 = mutableListOf<String>()	 //不设置初始值
arr2.add("pen")
arr2.add("apple")
arr2.add(2, "appplepen")  // 往下标2的位置添加内容

// 同样可以使用 arrayListOf<T> 来创建可变列表,但是新版本中不推荐。

1.2 创建不可变列表

  • 必须指定元素类型
  • 必须指定初始化数据元素
// 用listOf创建的列表不可以改变大小

val arr3 = listOf<Int>(1,2,3)  

1.3 创建可变Map

可以使用一下两种方式创建可变的字典类型
arrayMapOf<K,V>
mutableMapOf<K,V>
在<>需要分辨指定Key和Value的数据类型

val map1 = mutableMapOf<String, Int>(Pair("One",1),Pair("Two",2))) 	 //设置初始值, Key为字符串类型,Value为整数类型
val map2=  mutableMapOf<String, Int>()	 //不设置初始值
map2.put("one", 1)
map2["two"] = 2 // 推荐的方式
map2["three"] = 3 // 推荐的方式
map2["one"] = 100  //会更新key = "one"的对应值,覆盖之前的。


// 同样可以使用 arrayMapOf<T> 来创建可变Map,但是新版本中不推荐。

1.4 创建不可变Map

val map3 = mapOf<String, Int>(Pair("One",1),Pair("Two",2)))
// map3.put("Three", 3) 此行会报错,因为map3创建后就不可以增删了

// 除了使用Pair,还可以使用to来添加键值对
val map4 = mapOf<String, String>("key1" to "one", "key2" to "two")

1.5 创建两种Set

1、容器内部的元素不按顺序排列,因此无法按照下标进行访问。
2、容器内部的元素存在唯一性,如果存在则覆盖。
创建方式与上面相同,这里就把创建可变与不可变Set的代码放一起了

// 可变的Set
val set1= mutableSetOf<String>("H", "e", "l", "l", "o") //自动过滤掉重复元素
set1.add("a")
set1.add("b")
set1.add("c")

// 不可变的Set
val set12 = setOf("H", "e", "l", "l", "o")

2. 一些常见的Kotlin列表操作

2.1 增加元素和删除元素

val list1 = mutableListOf<Int>()
list1.add(1)
list1.add(1, 2)
list1.add(3)
// list1 ----> [1,2,3]

list1.removeAt(2) // 传输下标为2的元素
list1.remove(1) // 删除元素1
// 注意!!! 调换上两行的位置会报错,因为删除元素1后,没有下标为2的元素了。
// list1 ----> [2]

list1.set(0, 10)  //把下标为0的元素设为10
list1[0] = 10  //同上

list1.get(0)
list1[0]  //同上

2.2 列表变换

val list2= mutableListOf(1, 2, 3, 4)
list2.reverse()         //列表翻转
// list2 --> 4, 3, 2, 1

list2.shuffle()        //随机排列元素
// list2 --> 1, 3, 4, 2

2.3 列表排序

val list3= mutableListOf(10, 2, 20, 8)
list3.sort() // 从小到大排序
// list3 --> 2, 8, 10, 20

list3.sortDecending() // 从大到小排序
// list3 --> 20, 10, 8, 2

// 自定义排序
// 定义一个Student类,有name 和 score两属性
fun main() {
    class Student(val name:String, val score: Int) { }

    val studentList: MutableList<Student> = mutableListOf()
    studentList.add(Student("老大", 60))
    studentList.add(Student("老二", 70))
    studentList.add(Student("张三", 90))
    studentList.add(Student("李四", 85))

    //使用sortBy进行排序,适合单条件排序
    studentList.sortBy { it.score }  //按每个元素的score值进行从小到大排序

    studentList.forEach() {
        println("${it.name} : ${it.score}")
    }
}

/*
运行结果
老大 : 60
老二 : 70
李四 : 85
张三 : 90
 */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值