Kotlin数据容器基础-集合

《Kotlin从小白到大牛》第16章:数据容器——数组和集合 第16章 数据容器——数组和集合 当你有很多书时,你会考虑买一个书柜,将你的书分门别类摆放进入。使用了书柜不仅仅使房间变得整洁,也便于以后使用书时方便查找。在计算机程序中会有很多数据,这些数据也需要一个容器将它们管理起来,这就是数据容器。 数据容器本质是基于某种数据结构,常见的数据结构:数组(Array)、集(Set)、队列(Queue)、链表(Linkedlist)、树(Tree)、堆(Heap)、栈(Stack)和映射(Map)等结构。Kotlin中数据容器主要分为数组和集合。 16.1 数组 数组(A 阅读详情

今天学习集合。在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
 */
【WRF模拟】如何查看 WPS 的输入静态地理数据(二进制格式)? 如何查看 WPS 的输入静态地理数据(二进制格式)? 阅读详情

相关推荐

深入解析DDR5 RFM机制:从JESD79-5标准到硬件实现

本文深入解析了DDR5内存标准中的关键机制——RFM(Refresh Management)。文章从JESD79-5标准出发,详细阐述了RFM如何通过RAA计数器实现从被动定时到主动响应的智能刷新管理,并探讨了其硬件实现细节、命令调度挑战及系统级设计考量,为芯片设计工程师优化DDR5内存子系统性能与可靠性提供了实践指导。

fff88的博客 489

kotlin集合

与数组不同的是可变集合的大小可以动态改变。

qq_60171153的博客 291

Kindle电子书DRM破解全攻略:从下载到转换的完整流程(含最新DeDRM插件配置)

本文详细介绍了如何合法移除个人购买的Kindle电子书的DRM保护,实现跨设备阅读与备份。核心内容包括使用最新DeDRM插件(如noDRM分支)配合Calibre进行配置,并针对亚马逊最新的KFX加密格式提供了密钥提取与实战操作指南。文章强调该方法仅适用于个人合理使用,旨在帮助读者真正掌控自己的数字资产。

delta的博客 576

kotlin学习集合6(Array、Set、Map)

fun main(args: Array<String>) { /** * 集合, * 集合根据特性分: * 1、有序可重复 -Array * 2、无序不重复 -Set * 3、无序可重复 -Map,有唯一的键(key) */ /**-----------------Array-----

T-bright的博客 5988

电机控制中ADC采样时序的优化策略与实践

本文深入探讨了电机控制中ADC采样时序的优化策略与实践,重点分析了BLDC和FOC控制方案中的核心挑战与解决方案。通过硬件布局优化、软件滤波技术及动态时序补偿等方法,有效提升电流采样精度和系统稳定性,为电机控制系统的性能优化提供实用指导。

weixin_42519985的博客 386

iOS逆向实战:绕过SSL Pinning抓取ChatGPT设备令牌

在移动应用安全与网络协议分析领域,中间人攻击是一种核心的流量拦截与分析技术。其原理是在客户端与服务器之间插入一个代理节点,通过伪造数字证书来解密和窥探HTTPS加密流量。这项技术的工程价值在于,它使开发者能够调试API、分析通信协议以及实现自动化集成。然而,许多高安全要求的应用(如金融、社交类App)会采用SSL Pinning(证书绑定)技术来抵御此类攻击,这为逆向工程带来了挑战。本文聚焦于一个具体的应用场景:如何针对启用了SSL Pinning的ChatGPT iOS客户端,通过特定的工具链(如Trol

weixin_28235889的博客 974

Kotlin基础-数据容器(集合)

与数组不同的是 可变集合的 大小可以动态改变List:列表,有序的,可重复的Set:集合,无序的,不可重复的Map:字典,以键值对的形式存在,键是唯一的,值可以重复。

346

基于Simulink的魔术公式轮胎动力学仿真

本篇博文主要用来记录汽车系统动力学课程的学习,仅供课程阶段参考,与实际工程应用还有较大距离。基于Simulink的魔术公式轮胎动力学仿真本实例主要有以下任务。1.建立魔术公式轮胎动力学仿真模型。2.绘制不同载荷下的轮胎纵向力—滑动率关系曲线。3.绘制不同载荷下的轮胎侧向力—侧偏角关系曲线。4.绘制不同载荷下的轮胎回正力矩—侧偏角关系曲线。提示:以下是本篇文章正文内容,下面案例可供参考。

shy_201992的博客 6940

Android Kotlin 从入门到精通(二、集合)

是一个有序列表,可通过索引(下标)访问元素.元素可以在list中出现多次、元素可重复。:是元素唯一集合.一版来说set中元素的顺序并不重要、无序集合。:(字典)是一组键值对.键是唯一的,每个键都刚好映射到一个值,

weixin_44873906的博客 242

qupath再度更新:使用WSInfer进行深度学习

我们在下面提供了一个示例,说明如何使用 WSInfer 创建 WSI 中肿瘤和肿瘤浸润淋巴细胞 (TIL) 的空间图谱,这些图谱被认为在几种癌症中既有预后又有预测意义6,10,11,12.由于 WSI 非常大,因此它们通常被分解为补丁,以使分析变得可行。补丁分类的输出通常是空间分类地图,通常可以跨 WSI 集成,以创建表示该幻灯片的诊断、预测或“分数”的单个输出。在当前的实施中,我们专注于斑块分类的通用任务,该任务广泛用于广泛的病理学应用,具有促进诊断、预后或预测功能的深度学习模型。

hx2024的博客 2199

详细推导波特图增益和相位曲线

文章来源:https://mp.weixin.qq.com/s/UCy9mRRok5Hc9qHq3qde5g 今天这篇文章想把近段时间关于波特图方面学习的内容整理一下。波特图将会是梳理闭环控制这个系列的开始。目前的计划是,以无源器件为基础,然后结合运放,再过渡到开关电源的环路控制方面。如果对这方面感兴趣的朋友,可以持续一起学习起来,目标就是掌握开关电源的闭环控制。 1. 什么是波特图? 波特图最常见的应用是在线性非时变的系统中,用于对传递函数的增益和相位进行分析,从而判断出系统随频率的响应是否稳定。因此,波

ltqdxl的博客 2万+

Kotlin 数组和集合(二){Set集合、List集合、Map集合}

【文字内容源于《疯狂Kotlin讲义》,代码内容原创】 一、Set集合 1. 声明和创建Set集合 实际上 Kotlin 并没有真正为只币 平台实现任何 Set 集合类(只是通过别名借用了 Java集合框架的类),因此不推荐通过构造器创建 Set 集合,而是推荐使用 Kotlin 提供的工具函数来创建 Set 集合。 Kotlin 提供了如下函数来创建 Set 集合。 (1)setOf(): 该函数返回不可变的 Set 集合。该函数可接受 个或多个参数,这些参数将 作为集合的元素。

桃子不出的博客 3975

堆一呼一吸之间:动态扩缩容引发JVM堆内存震荡的伸缩算法、代际传导与容器定容解析

Kubernetes扩容后,新Java实例的GC频率常比老实例高出数倍,堆容量反复伸缩。本文从一次支付系统的GC陡增出发,结合HotSpot源码与JDK 8实测,拆解堆伸缩的记账规则:期望容量以GC后已用量为基数、以Xms为下限,按空闲比例判断扩缩,收缩只在老年代回收后按0%、10%、40%、100%步进;再剖析年轻代随老年代联动、晋升风暴与元空间触发线,对比Parallel、G1、ZGC等收集器及JDK 26的变化,讨论容器分账、HPA共振与原地扩缩容,最后给出分级定容、预热与监控的方案。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 15万+

Kotlin数据类型

基本数据类型kotlin的基本数据类型跟Java等高级语言分类一样,包括、整型、长整型、浮点型、双精度、布尔型、字符型、字符串这几种常见类型,不同于 Java 的是,字符不属于数值类型,是一个独立的数据类型。因为Kotlin 中没有基础数据类型,只有封装的数字类型。所以较小类型并不是较大类型的子类型,较小的类型不能隐式转换为较大的类型。 kotlin与java的基本数据类型对比 Kotli...

qq_50675668的博客 232

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Kotlin 数据容器 - List(List 概述、创建 List、List 核心特性、List 元素访问、List 遍历)

Kotlin 数据容器 - List(List 概述、创建 List、List 核心特性、List 元素访问、List 遍历)

weixin_52173250的博客 997

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

安卓开发学习---kotlin版---笔记(一)

上次学习安卓,学了Java开发,简单的搭了几个安卓界面。这次要学习Kotlin语言,然后开发安卓,趁着还年轻,学点新东西,坚持~

IOSSHAN的博客 785

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

spark进阶(三):scala基础

spark进阶(三):scala基础 Spark本身就是使用Scala语言开发的,spark和flink的底层通讯都是基于的高并发架构akka开发,然而akka是用scala开发的,Scala与Spark可以实现无缝结合,因此,Scala顺理成章地成为了开发Spark应用的首选语言,大多数spark教程都是基于scala编写,学习一下scala也是很必要的。 这里只对scala在spark中使用的部分进行记录,不涉及一些复杂的scala使用,只保证能正常使用spark即可。 对于scale的话,学过kotl

泛泛之素 1734

专高三知识点day1kotlin

kotlin语言 基本类型

sdlnwx的博客 1594

kotlin数据容器

映射内部保存的是一组键值对(Key-Value),也就是说,每个元素都由两部分构成,第一部分是元素的键,相当于元素的名字;队列是一种元素之间按照顺序排列的容器,它与集合的最大区别,便是多了个次序管理。Kotlin 标准库提供了一整套用于管理集合的工具,集合是可变数量(可能为零)的一组条目,各种集合对于解决问题都具有重要意义,并且经常用到。不难发现,每个不可变集合都有对应的可变集合,也就是以mutable为前缀的集合。集合分为可变集合,显而易见,是指集合创建完成之后,可以对集合进行增删改查操作。

double222222的博客 1764

Kotlin总结之二 数组和集合容器

一 Kotlin中的数组 1.数组的类型 kotlin java IntArray int[] ShortArray short[] LongArray long[] FloatArray float[] DoubleArray double[] CharArray char[] 2.数组的创建 java创建数组的两种方式: int[] intArray = new int[6] //表达式:数据类型[] 标识 = new 数

XBlithe的博客 437

Kotlin 笔记 数据容器(九)

Kotlin 笔记 数据容器(九) Kotlin笔记数据类型(一) Kotlin笔记字符串(二) Kotlin笔记运算符(三) Kotlin笔记函数(四) Kotlin笔记面向对象(五) Kotlin笔记继承、抽象类、接口(六) Kotlin笔记高阶函数(七) Kotlin笔记泛型(八) 文章目录Kotlin 笔记 数据容器(九)一、数组1、对象数组使用2、基本数据类型数组二、集合1.set集合2、不可变Set集合3、可变Set集合2、list集合1、不可变的list2、可变的li

苏打水解渴的博客 545

Kotlin学习笔记四、集合set-容器list-映射map相关

一、概述。 Kotlin中的容器分三类,分别是集合Set、队列List、映射Map,跟Java的集合set、list、map一一对应。但是kotlin里面的容器又分为只读和可变两种类型。区别在于该容器是否可以进行增、删、改等变更操作。Kotlin语言里面,对于变量的修改操作是很谨慎的,每隔变量在声明的时候就必须指定能否修改。比如我们前面讲到过的,被val修饰的变量就不能够被修改,而被var修饰的则可以被修改。 回到kotlin容器这边,kotlin默认容器为只读容器,如果要允许修改,就需要使用前缀Mutab

haoyuegongzi的博客 1134

Kotlin第五弹:数据容器

容器是用于存放数据的载体。容器分为数组、集合。Kotlin 作为一门全新的语言,肯定还是要有自己的容器类,不然哪天 Java 跟 Kotlin 划清界限,那麻烦就大了。Kotlin 也拥有三类基本的容器,分别是集合 Set、队列 List、映射 Map,每种 容器又分作只读与可变两种类型这是为了判断该容器能否进行增删改等变更操作。• Kotlin 数组• Kotlin 集合本节内容较多,难度并不大,希望大家可以好好消化一下。咱们下期见!

m0_58941767的博客 948

【Kotlin -- 知识点】数据容器(数据 & 集合)

容器是用于存放数据的载体。容器分为数组、集合。

Kevin Learn Android 1441

Kotlin集合类

Kotlin集合类 正在连载中,敬请期待!

保持专注,保持热爱 762

Kotlin学习之集合

但有时如果仅仅想重复一件事情n次,那就没有必要用Ranges,虽然它也可以,这时最为方便的是函数repeat,它与区间的唯一区别是repeat是没有返回值的,它仅是把一件事情重复n次,但没有返回值也就是说没有办法再转化为其他数组或者列表。Ranges是一个数据结构代表着一个区间,这个区间可能是一个整数范围,也可能是一个字符范围,其实也可以是其他自定义数据类型,只要能表达 出区间的概念。以外,还有对象的容器也非常的重要,比如线性容器(数组,列表和Set)和二维容器(哈希表)等。

稀有猿诉 1251
上一篇: Kotlin数据容器 - 数组
下一篇: 【LP】线性规划基础 Introduction to Linear Programming #1
WeekSix
博客等级 码龄7年 0粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值