《Kotlin入门实战》CH7 | 集合类

Kotlin程序员面试算法宝典【1.9】 本文介绍了二叉树和数组相关的算法问题及解决方案。对于二叉树,详细讲解了镜像反转的实现方法(递归交换左右子树),以及在二叉排序树中查找特定节点的算法(利用中序遍历特性)。对于数组,重点分析了寻找唯一重复元素的多种方法:哈希法、累加求和法、异或法、数据映射法和环形相遇法,并比较了它们的性能特点(时间复杂度O(N),空间复杂度O(1))。文章还探讨了如何实现反向DNS查找缓存(使用Trie树结构)和查找二叉树最大路径和的问题。每种算法都配有代码示例和复杂度分析,展示了不同场景下的最优解决方案选择。 阅读详情

集合类

在Java类库中有一套相当完整的容器集合类来持有对象。Kotlin没有去重复造轮子(Scala则是自己实现了一套集合类框架),而是在Java类库的基础上进行了改造和扩展,引入了不可变集合类,同时扩展了大量方便实用的功能,这些功能的API都在kotlin.collections包下面。

集合类概述

8923455-6ac9b6feec45488c.png
集合层次
  • Iterable 可遍历
  • MutableIterable 支持删除元素的迭代
  • List/Set/Map,只读不可变
  • MutableList/MutableSet/MutableMap,可读写

创建集合类

  • listOf/setOf/mapOf 创建不可变集合
  • mutableListOf()、mutableSetOf()、mutableMapOf() 创建可变集合

遍历集合中的元素

List、Set类继承了Iterable接口,里面扩展了forEach函数来迭代遍历元素;同样,Map接口中也扩展了forEach函数来迭代遍历元素。

fun main() {
    val list = listOf<Int>(1, 2, 3, 4)
    list.forEach { println(it) }
    list.forEachIndexed { index, i -> println(list[index]) }

    val set = setOf<Int>(1, 2, 3, 4)
    set.forEach { println(it) }
    set.forEachIndexed { index, i -> println("index:$index, i:$i") }

    val map = mapOf(1 to 'A', 2 to 'B', 3 to 'C')
    map.forEach { t, u -> println("Key:$t, value:$u") }
    map.entries.forEach { println(it) }
}
1
2
3
4
1
2
3
4

1
2
3
4
index:0, i:1
index:1, i:2
index:2, i:3
index:3, i:4

Key:1, value:A
Key:2, value:B
Key:3, value:C
1=A
2=B
3=C

映射函数

使用map函数,可以把集合中的元素依次使用给定的转换函数进行映射操作,元素映射之后的新值会存入一个新的集合中,并返回这个新集合。

fun main() {
    val list = listOf(1, 2, 3, 4)
    val list2 = list.map { it * it }
    val list3 = list.map { it -> listOf(it + 1, it + 2, it + 3, it + 4) }

    println(list2)
    println(list3)
    println(list3.flatten()) // Iterator<Iterator> 类型才能flatten
    list.flatMap { it -> listOf(it + 1, it + 2, it + 3, it + 4) } // 相当于map + flatten

}

[1, 4, 9, 16]
[[2, 3, 4, 5], [3, 4, 5, 6], [4, 5, 6, 7], [5, 6, 7, 8]]
[2, 3, 4, 5, 3, 4, 5, 6, 4, 5, 6, 7, 5, 6, 7, 8]
[2, 3, 4, 5, 3, 4, 5, 6, 4, 5, 6, 7, 5, 6, 7, 8]

过滤函数

val list = listOf(1,2,3,4)
list.filter{ it >= 2 }

排序函数

    list.reversed()
    list.sorted()

实际上直接调用Java Api

去重函数

val dupList = listOf(1, 1, 2, 2, 3, 3, 3)
dupList.distinct() //去重函数,返回 [1, 2, 3]

http://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/index.html

Rider接入豆包与智谱AI的插件开发实战指南 IDE智能编程辅助是现代开发者提效的核心能力,其本质是将编辑器上下文(如代码结构、光标语义、项目元信息)与大模型API深度协同。本文聚焦JetBrains Rider这一.NET专属IDE,解析如何基于IntelliJ平台规范,构建可生产落地的AI插件——涵盖PSI语法树解析、流式SSE响应处理、豆包开放平台与智谱ZCode双协议适配、企业级安全网关集成等关键技术环节。内容直击Rider用户长期缺失开箱即用AI支持的痛点,提供从插件工程搭建、Token安全存储到函数调用(Function Calling)落 阅读详情

相关推荐

PaddleOCR实战:轻量级中文文字识别全解析

OCR(光学字符识别)技术通过深度学习实现图像到文本的转换,其核心在于检测-分类-识别的多阶段处理流程。基于卷积神经网络和序列建模的现代OCR系统,在保持轻量化的同时显著提升了复杂场景的识别鲁棒性。PaddleOCR作为开源解决方案,通过模型压缩和端到端优化,既解决了传统OCR部署复杂的问题,又在中文场景下达到商业级准确率。典型应用包括文档数字化、移动端文字提取和自动化流程中的结构化信息采集,其中针对扫描件优化方向分类、对自然场景调整检测阈值等工程技巧尤为重要。实测表明,结合OpenCV预处理与Paddle

weixin_34088583的博客 296

《Kotlin入门实战》CH5 | 函数与函数式编程

函数与函数式编程 函数式编程与命令式编程最大的不同是:函数式编程的焦点在于数据的映射,命令式编程(imperative programming)的焦点是解决问题的步骤。 函数式编程和命令式编程比较 fun main() { val list = listOf<Int>(1, 2, 3, 4, 5) // 函数式编...

落红不是无情物 202

合宙Air780EP速连OneNET:AT+MQTT应用指南

本文详细讲解了合宙Air780EP使用AT指令通过MQTT接入OneNET的过程。

2401_82812461的博客 1388

Java/Kotlin TCP Socket TLS/SSL加密通讯实战指南

在网络编程中,TCP Socket是实现客户端与服务器端稳定双向通讯的基础技术。然而,明文传输的数据在公网环境中面临被截获和窃取的风险,因此数据加密成为保障通讯安全的核心原理。TLS/SSL协议作为业界标准,通过非对称加密进行密钥交换、对称加密保障传输效率,并利用数字证书实现身份认证,为数据传输提供了机密性、完整性和可信性三重保障。这一技术价值在于,它能有效防止中间人攻击和数据泄露,是构建安全网络应用的基石。在Java/Kotlin开发实践中,通过SSLSocket和SSLServerSocket可以便捷地

weixin_33845881的博客 527

电机控制——PMSM无感FOC控制(一)FOC入门

FOC 是一种电机控制技术,全称为 Field Oriented Control(磁场定向控制),也称作矢量控制。该技术可以提高电机的效率、控制稳定性和精度,广泛应用于电机驱动系统中,是目前无刷直流电机(BLDC)、永磁同步电机(PMSM)、感应电机的高效控制的最优方法之一。本节主要讲了FOC的大致流程,带大家先了解FOC到底是个什么东西在做什么,各个模块具体的原理会放到后面的章节详细讲解。FOC其实就是通过控制,相电流按照正弦变化,从而产生出旋转的磁场,控制电机转子转动。

zhuxinmingde的博客 2623

大连理工大学中文情感词汇本体库(含情绪分析代码)

中文文本数据的情绪计算昨天如何对微博推文进行情绪分析(细粒度情感分析)介绍了英文的NRC情绪词典。虽然支持中文,但由于制作问题,导致并不完全适应中文场景。今天介绍大连理工大学中文情感...

大邓和他的Python 4万+

CH34xUART 1.0.0 安卓库集成实战:适配Android 13,修复3个关键Bug

本文详细介绍了CH34xUART 1.0.0安卓库的集成实战,重点讲解了如何适配Android 13并修复3个关键Bug。内容涵盖现代Android开发环境配置、USB权限管理、串口参数设置以及性能优化技巧,帮助开发者高效实现USB串口通信功能。

weixin_30603633的博客 388

RC滤波电路实战解析:无源与有源设计的性能对比与应用选择

本文深入解析了RC滤波电路的核心原理,重点对比了无源滤波电路与有源滤波电路的性能差异。文章通过实测波形与仿真数据,详细阐述了两者在带载能力、频率响应精度、噪声特性等方面的优劣,并提供了清晰的应用选择指南,帮助工程师根据信号属性、负载条件和性能要求做出最优设计决策。

weixin_29268637的博客 429

视频情感分析新思路:拆解CH-SIMS数据集的模态差异与标注技巧

本文深入探讨了视频情感分析的新思路,重点解析了CH-SIMS数据集的核心价值。该数据集通过为文本、音频、视觉模态提供独立的细粒度情感标签,揭示了情感表达的复杂性与模态间差异,为克服传统多模态情感分析中特征同质化问题提供了关键数据支持。文章进一步阐述了如何利用这种标注方法设计多任务学习框架,以构建更精准、可解释性更强的模态感知模型。

sss66的博客 502

手把手教你复现KDD 2024时空预测顶会论文:以UniST和ImputeFormer为例的代码实战与避坑指南

本文详细指导如何复现KDD 2024顶会论文中的UniST和ImputeFormer模型,涵盖环境配置、数据处理、模型训练及评估等关键步骤。通过实战案例和避坑指南,帮助研究者掌握时空预测与插补技术,提升在智慧城市、交通管理等领域的应用能力。

weixin_29204205的博客 279

OpenClaw与Ollama本地AI部署指南

AI模型本地化部署是当前企业数字化转型的关键技术,通过开源框架Ollama可以在消费级硬件上运行大语言模型。本文以OpenClaw多智能体系统为例,详解从环境配置到模型优化的全流程实践,特别针对国内开发者遇到的网络问题提供了镜像加速等解决方案。这种私有化部署方案尤其适合金融数据分析、企业知识管理等对数据安全要求高的场景,通过模块化设计实现多智能体协作,同时保持对NVIDIA显卡和普通CPU的兼容性。

weixin_34302561的博客 396

Kotlin学习之旅(D14)-学习资料汇总

首先祝所有程序员1024节日快乐 我们也来到了Kotlin学习之旅的最后一天 今天的主题是:学习资料汇总 文章目录前言官方文档文档类在线编程书籍《Kotlin in Action》《Kotlin for Android Developers》《Programming Kotlin》总结视频Youtube - Kotlin TutorialB站- 黑马Kotlin教程其他视频[Introductio...

BlueLzy的个人博客 938

微生物组数据分析实战:从OTU/ASV过滤到相对丰度转换的标准化流程

本文详细介绍了微生物组数据分析中从原始OTU/ASV表格到标准化相对丰度表格的完整预处理流程。通过基于绝对丰度和出现频率的过滤步骤有效剔除测序噪音与污染,再通过相对丰度转换解决样本间测序深度差异问题,为后续的多样性分析和差异比较奠定可靠基础。文章提供了清晰的R语言实战代码与参数设置思路。

tree的博客 1259

Atrium expectation-group(软断言)实战:如何一次暴露全部失败而不重复书写被测对象

Atrium 是 Kotlin 多平台的期望断言(expectation)库,其 **expectation-group(期望组)** 就是官方对标 AssertJ 软断言(soft assertions)的机制:把多条期望写进一个代码块,全部失败一次性汇报,且无需重复书写被测对象。本文用最少的代码讲透软断言的用法、优势与避坑要点。 ## 为什么“快速失败”反而拖慢测试 🐢 传统的链式断言是

gitblog_00706的博客 392

R语言中的summarise函数和mutate函数用于计算分组占比。下面是关于这两个函数的详细介绍以及相应的源代码示例:

R语言中的summarise函数和mutate函数用于计算分组占比。

CodeByte的博客 1182

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

安卓自学推荐网课

明阳 541

VC中sqlite的使用

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

从security-audit-skill学到手的10条经验:构建你自己的AI安全审计harness

security-audit-skill 是一个面向编码代理的开源技能包,它把普通的 coding agent 变成一个**可独立验证、可机器校验的 AI 安全审计 harness**:六阶段流水线、覆盖台账、对抗式验证、结构化 JSON 输出,外加两个零依赖的本地校验器。这套方法正是 Cloudflare 漏洞发现系统的单仓库起点。本文从它身上提炼 10 条可直接落地的经验,帮助你构建自己的安全

gitblog_01066的博客 813

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

给 OpenToonz 换语言界面:从切换菜单到翻译源码的完整指南

用 OpenToonz 画动画时,你可能遇到过这样的画面:菜单是中文,但新建特效的弹窗、错误提示却是一串英文。别急着怀疑翻译质量,先打开 Preferences 看看语言选项——OpenToonz 的界面语言可以在启动时切换,支持中文、日本語、한국어、Deutsch、Русский 等 10 种语言。这篇指南带你看懂它的多语言机制:怎么换、翻译文件放在哪、为什么有些词就是换不了,以及想补几句新翻译

gitblog_00647的博客 402

Charlatano开源架构解析:模块化设计与跨平台兼容性实现

Charlatano是一个基于JVM的开源项目,它证明了在原生游戏中使用JVM技术实现作弊系统的可行性,并展示了其对抗反作弊签名检测系统的长期有效性。本文将深入剖析Charlatano的模块化架构设计和跨平台兼容性实现,为开发者提供一个清晰的技术参考。 ## 项目整体架构概览 Charlatano采用了分层的模块化架构,主要分为以下几个核心模块: - **游戏核心模块**:处理游戏内存读写、

gitblog_00901的博客 734

2025年Android开发面试核心趋势与高频考点解析

在移动开发领域,Android技术栈持续演进带来新的技术挑战与机遇。Kotlin作为现代Android开发的首选语言,其协程机制和JVM底层原理成为面试重点考察内容。跨平台开发框架如Flutter通过高效的渲染引擎实现性能突破,其与原生平台的通信机制直接影响混合开发质量。Jetpack Compose作为声明式UI框架,其智能重组机制和状态管理方案能显著提升界面性能。从工程实践角度看,Android 14引入的隐私沙盒、预测性返回手势等新特性要求开发者掌握系统级适配方案。性能优化维度也从传统内存管理扩展到启

weixin_34174322的博客 297

第50篇-多数据源集成

【摘要】本文介绍了Kotlin+Spring Boot实现多数据源集成的完整方案。主要内容包括:1)多数据源典型应用场景(读写分离、业务分析分离等);2)mini-shop项目架构设计,主库使用PostgreSQL存储业务数据,分析库采用ClickHouse处理统计报表;3)详细配置步骤,通过@Primary和@Qualifier注解区分不同数据源,并给出JPA和JDBC两种集成方式;4)实战代码示例,包含yml配置、数据源初始化及业务服务调用。该方案使应用能够高效管理不同类型的数据库连接,满足复杂业务场景

liumingxiy的博客 132

超轻量级中文OCR终极指南:4.7M模型如何解决移动端文字识别难题

在移动应用开发中,集成OCR功能常面临模型体积庞大、推理速度慢、多平台适配复杂等痛点。chineseocr_lite作为一款超轻量级中文OCR解决方案,总模型仅4.7M,却能提供媲美大型模型的识别准确率。本文将深入解析chineseocr_lite的架构设计,并分享如何在实际项目中高效集成这一轻量级OCR引擎。 ## 🔍 为何4.7M模型能挑战传统OCR方案? 传统OCR解决方案往往依赖数百

gitblog_00173的博客 781

在 NNI 中编写 Trial 的完整指南:NNI API 与 Python Annotation 双路径实践

在 NNI(Neural Network Intelligence)中,**Trial** 是运行一次配置(例如一组超参数)于某个模型上的独立尝试,是整个超参数调优、NAS 与模型压缩实验的最小执行单元。本文以 NNI 官方文档《Write a Trial Run on NNI》为骨架,系统讲解定义 Trial 的两种方式——显式调用 **NNI API** 与使用 **Python Annota

gitblog_00817的博客 740

Android离线中文语音合成终极指南:基于TensorFlow Lite的TTS引擎深度解析

在移动应用开发中,实现高质量的**中文语音合成**一直是个技术挑战,尤其是在需要**完全离线运行**的场景下。ChineseTtsTflite项目提供了一个基于TensorFlow Lite的**Android离线中文TTS引擎**解决方案,采用Kotlin + JetPack Compose + Tensorflow Lite技术栈开发,让中文文本转语音变得前所未有的简单和高效。这款**离线中文

gitblog_00835的博客 823

Go最全《伏C录》凝丹篇-函数栈帧理解手册_栈枝1(3),字节跳动厂内部超高质量Flutter+Kotlin笔记

将esp-0E4h赋值给寄存器esp,形象的表述是esp向低地址方向移动4个字节,上端为低地址,下端为高地址,即向上移动4字节空间。之后pop ebp,由于栈顶指向的是main函数栈帧的栈底,因此出栈ebp指向main函数栈帧的栈底。:将【ebp-20】这块空间4字节的数据放入eax中。第二条汇编指令:将14h放入[ ebp-14h ]这块空间中,即把b放入那块空间中。:将【ebp-8】这块空间4字节的数据放入ecx中。第一条汇编指令:将0Ah放入[ ebp-8 ]这块空间中,即把a放入那块空间。

2401_84924721的博客 412

Proton Mail Android app核心功能解析:从防截屏到背景同步的7个隐私保护技巧

Proton Mail Android app是一款注重隐私保护的电子邮件应用,为用户提供了从防截屏到背景同步等多种实用的隐私保护功能。本文将详细解析其中7个核心隐私保护技巧,帮助用户更好地保护自己的邮件信息安全。 ## 一、防止截屏,筑牢信息安全第一道防线 在隐私保护设置中,Proton Mail Android app提供了“防止截屏”功能。开启该功能后,应用将阻止在邮件界面进行截屏操作,有

gitblog_00352的博客 660
上一篇: 《Kotlin入门实战》CH6 | 扩展函数与扩展属性
下一篇: 《Kotlin入门实战》CH8 | 泛型
KriyWu
博客等级 码龄9年 3粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值