Kotlin中 for in 是有序的吗?forEach呢?
我们要遍历一个数组、一个列表,经常会用到kotlin的 for in 语法,但是 for in 是不是有序的呢?forEach是不是有序的呢?这就需要看一下它们的本质了。
数组的 for in
// 调用:
val arr = arrayOf(1, 2, 3)
for (ele in arr) {println(ele)
}
反编译成Java是个什么东西呢?
Integer[] arr = new Integer[]{1, 2, 3};
Integer[] var4 = arr;
int var5 = arr.length;for(int var3 = 0; var3 < var5; ++var3) {int ele = var4[var3];System.out.println(ele);
}
总结:从Java代码可以看出,实际就是一个普通的for循环,是从下标0开始遍历到结束的,所以是有序的。
列表的 for in
// 调用:
val list = listOf(1, 2, 3)
for (ele in list) {println(ele)
}
反编译成Java:
List list = CollectionsKt.listOf(new Integer[]{1, 2, 3});
Iterator var3 = list.iterator();while(var3.hasNext()) {int ele = ((Number)var3.next()).intValue();System.out.println(ele);
}
可以看出列表的for in是通过iterator实现的,和数组不一样,那这个iterator遍历是否是有序的呢?首先我们要知道这个iterator怎么来的:
// iterator 是通过调用 list.iterator() 得到的,那么这个list又是什么呢?
Iterator var3 = list.iterator();// list
List list = CollectionsKt.listOf(new Integer[]{1, 2, 3});// list是通过数组elements.asList()得到的
public fun <T> listOf(vararg elements: T): List<T> = if (elements.size > 0) elements.asList() else emptyList()// 这里有个expect,找到对应的actual
public expect fun <T> Array<out T>.asList(): List<T>// 对应的actual
public actual fun <T> Array<out T>.asList(): List<T> {return ArraysUtilJVM.asList(this)
}// 最终调用了Arrays.asList(array)
class ArraysUtilJVM {static <T> List<T> asList(T[] array) {return Arrays.asList(array);}
}public class Arrays {// 从这里看到最终拿到的list是 Arrays 类中的 ArrayList// 然后我们找到里面的 iterator() 方法public static <T> List<T> asList(T... a) {return new ArrayList<>(a);}private static class ArrayList<E> extends AbstractList<E>implements RandomAccess, java.io.Serializable{private final E[] a;@Overridepublic Iterator<E> iterator() {// 最终得到的iterator是ArrayItr// 这里的a是一个数组,也就是我们一开始传进来的1,2,3return new ArrayItr<>(a);}}private static class ArrayItr<E> implements Iterator<E> {private int cursor;private final E[] a;ArrayItr(E[] a) {this.a = a;}@Overridepublic boolean hasNext() {return cursor < a.length;}@Overridepublic E next() {int i = cursor;if (i >= a.length) {throw new NoSuchElementException();}cursor = i + 1;return a[i];}}
}
总结:列表的for in是通过iterator实现的,这个iterator是ArrayItr,从里面的next()方法可以看出,这也是有序的,从cursor开始,cursor默认是0,也就是从下标0开始遍历。
注:这里只是分析了Arrays.ArrayList的iterator,具体的集合类需要具体分析,比如ArrayList、LinkedList等,不过从正常思维来看,iterator是一个迭代器,就应该有序的把数据一个一个丢出来。
数组的 forEach
// 调用:
val arr = arrayOf(1, 2, 3)
arr.forEach {println(it)
}// 点进去forEach看:
// 其实也是调用了for in,所以也是有序的。
public inline fun <T> Array<out T>.forEach(action: (T) -> Unit): Unit {for (element in this) action(element)
}
列表的 forEach
// 调用:
val list = listOf(1, 2, 3)
list.forEach {println(it)
}// 点进去forEach看:
// 其实也是调用了for in,所以也是有序的。
public inline fun <T> Iterable<T>.forEach(action: (T) -> Unit): Unit {for (element in this) action(element)
}
相关文章:
Kotlin中 for in 是有序的吗?forEach呢?
我们要遍历一个数组、一个列表,经常会用到kotlin的 for in 语法,但是 for in 是不是有序的呢?forEach是不是有序的呢?这就需要看一下它们的本质了。 数组的 for in // 调用: val arr arrayOf(1, 2, 3) for (ele in …...
每日一练2023.11.27———连续因子【PTA】
题目链接:L1-006 连续因子 题目要求: 一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3567,其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N,要求编写程序求出最长连续因子的个数&#…...
P8A002-CIA安全模型-配置Linux描述网络安全CIA模型之可用性案例
【预备知识】 可用性(Availability) 数据可用性是一种以使用者为中心的设计概念,易用性设计的重点在于让产品的设计能够符合使用者的习惯与需求。以互联网网站的设计为例,希望让使用者在浏览的过程中不会产生压力或感到挫折,并能让使用者在使用网站功能时,能用最少的努力…...
SpringCloudAlibaba之sentinel 流量卫兵(流控,熔断降级) ——详细讲解
目录 一、什么是sentinel 二、sentinel使用 1. sentinel dashboard的安装 2.启动 3.访问web界面 编辑 4.登录 三、sentinel 实时监控服务 1.创建项目引入依赖 2.配置 3.启动服务 4.访问dashboard界面查看服务监控 5.开发服务 6.启动进行调用 7.查看监控界面 四、senti…...
C++封装dll和lib 供C++调用
头文件interface.h #pragma once #ifndef INTERFACE_H #define INTERFACE_H #define _CRT_SECURE_NO_WARNINGS #define FENGZHUANG_API _declspec(dllexport) #include <string> namespace FengZhuang {class FENGZHUANG_API IInterface {public:static IInterface* Cre…...
ffmpeg播放器实战(播放器流程)
1.流程图 1.main窗口创建程序窗口 程序窗口构造函数执行下面内容 2.开启播放 3.开启解码 4.开启渲染 5.反馈给ui 本文福利, 免费领取C音视频学习资料包学习路线大纲、技术视频/代码,内容包括(音视频开发,面试题,FFmpeg…...
Android 13.0 开机过滤部分通知声音(莫名其妙的通知声音)
1.概述 在13.0的系统定制开发产品的中,有时候在系统开机的时候会有一些通知的声音,但是由于系统模块太多,也搞不清楚到底是哪个模块发出的通知声音,所以就需要从通知的流程来屏蔽这些通知声音,接下来看具体怎么实现在开机的时候过滤开机声音的功能 2.开机过滤部分通知声音…...
Adversarial Attack and Defense on Graph Data: A Survey(2022 IEEE Trans)
Adversarial Attack and Defense on Graph Data: A Survey----《图数据的对抗性攻击和防御:综述》 图对抗攻击论文数据库: https://github.com/safe-graph/graph-adversarial-learning-literature 摘要 深度神经网络(DNN)已广泛应…...
css中flex两列布局(一列自适应其他固定)
问题 最近写一个布局的时候,遇到一个问题。如下图的布局。在没有图片的时候布局是正常的,如果有图片且设置了width:100%;height: 100%; 则会出现图片将自适应布局撑开的情况。 我的解决方式是让图片不缩放,图片外层再添加一个div元素。形如…...
【深度学习】gan网络原理实现猫狗分类
【深度学习】gan网络原理实现猫狗分类 GAN的基本思想源自博弈论你的二人零和博弈,由一个生成器和一个判别器构成,通过对抗学习的方式训练,目的是估测数据样本的潜在分布并生成新的数据样本。 1.下载数据并对数据进行规范 transform tran…...
⑨【Stream】Redis流是什么?怎么用?: Stream [使用手册]
个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ ⑨Redis Stream基本操作命令汇总 一、Redis流 …...
浙江启用无人机巡山护林模式,火灾扑救效率高
为了保护天然的森林资源,浙江当地林业部门引入了一种创新技术:林业无人机。这些天空中的守护者正在重新定义森林防火和护林工作的方式。 当下正值天气干燥的季节,这些无人机开始了它们的首次大规模任务。它们在指定的林区内自主巡逻ÿ…...
Starrocks异步物化视图的使用以及注意事项
最近在使用starrocks来进行实时数据项目的开发,尝试使用了一下starrocks的异步物化视图。 使用版本: 3.1.2-4f3a2ee 创建三个测试表, 注意只有test_mv_table1为分区表,其他两个都是非分区表: CREATE TABLE test_mv_table1 (periodday DATE NOT NULL CO…...
SpringBoot整合Sharding-Jdbc实现分库分表和分布式全局id
SpringBoot整合Sharding-Jdbc Sharding-Jdbc sharding-jdbc是客户端代理的数据库中间件;它和MyCat最大的不同是sharding-jdbc支持库内分表。 整合 数据库环境 在两台不同的主机上分别都创建了sharding_order数据库,库中都有t_order_1和t_order_2两张…...
「江鸟中原」有关HarmonyOS-ArkTS的Http通信请求
一、Http简介 HTTP(Hypertext Transfer Protocol)是一种用于在Web应用程序之间进行通信的协议,通过运输层的TCP协议建立连接、传输数据。Http通信数据以报文的形式进行传输。Http的一次事务包括一个请求和一个响应。 Http通信是基于客户端-服…...
vuex的使用笔记
1.安装 npm安装 npm install vuexnext --saveyarn安装 yarn add vuexnext --save2.基本结构 import Vuex from vuexconst store createStore({ //状态:相当于vue中的data() state() {return {name: 0,code:"",todos: [{ id: 1…...
汇编:关于栈的知识
1.入栈和出栈指令 2. SS与SP 3. 入栈与出栈 3.1 执行push ax ↑↑ 3.2 执行pop ax ↓↓ 3.3 栈顶超界的问题 4. 寄存器赋值 基于8086CPU编程时,可以将一段内存当作栈来使用。一个栈段最大可以设为64KB(0-FFFFH)。 1.入栈和出栈指令…...
uniapp使用map标签
在UniApp中,可以使用map标签来显示地图,并通过其属性来自定义地图的样式和行为。以下是一些常用的map标签属性: id:用于给地图组件指定一个唯一的标识符,方便在代码中进行引用和操作。 style:用来设置地图…...
MacOS14 Sonoma 安装 Flutter 开发环境
本文针对 小白用户也包括自己,以前都是将这些写入我的有道云笔记。为了让给多人看见或者说自己更好的浏览,先将其记录如下。 朋友介绍一个项目说要开发一款App,最近也是闲着就答应下来。主要功能是通过蓝牙BLE控制设备的一个 Iot边缘设备&…...
【Web】PHP反序列化刷题记录
目录 ①[NISACTF 2022]babyserialize ②[NISACTF 2022]popchains ③[SWPUCTF 2022 新生赛]ez_ez_unserialize ④[GDOUCTF 2023]反方向的钟 再巩固下基础 ①[NISACTF 2022]babyserialize <?php include "waf.php"; class NISA{public $fun"show_me_fla…...
Sony-PMCA-RE技术解析与实战指南:解锁Sony相机潜能的开源工具
Sony-PMCA-RE技术解析与实战指南:解锁Sony相机潜能的开源工具 【免费下载链接】Sony-PMCA-RE Reverse Engineering Sony Digital Cameras 项目地址: https://gitcode.com/gh_mirrors/so/Sony-PMCA-RE 一、价值定位:重新定义相机控制边界 1.1 开源…...
比迪丽LoRA部署优化:TensorRT加速后推理速度提升300%实测
比迪丽LoRA部署优化:TensorRT加速后推理速度提升300%实测 1. 引言:当二次元老婆遇上推理加速 如果你玩过AI绘画,尤其是喜欢生成《龙珠》里的角色比迪丽,那你一定知道等待图片生成时的那种心情——看着进度条一点点爬,…...
编程新手学编程,先学C语言还是C++?学姐告诉你答案
身为一名编程方面的新手,大家都会遭遇的一个疑问是:是要先去学习C语言,还是要先去学习C?有些同学会认为倘若我先着手学习C,之后再回过头来学习C语言,这样是不是会更为简便?毕竟,升级…...
JAVA红娘交友小程序实现原理及开源uniapp代码片段
JAVA红娘交友小程序实现原理后端架构设计基于Spring Boot框架搭建RESTful API服务,采用Maven进行依赖管理。核心模块包括用户认证模块、匹配算法模块、即时通讯模块和数据持久化模块。数据库设计使用MySQL关系型数据库,主要表结构包括:用户表…...
高效下载B站视频全攻略:Downkyi让你轻松管理视频资源
高效下载B站视频全攻略:Downkyi让你轻松管理视频资源 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等&#x…...
ES6到ES10实战指南:这些JavaScript新特性你真的用对了吗?
ES6到ES10实战指南:这些JavaScript新特性你真的用对了吗? 1. 从语法糖到编程范式:重新理解ES6核心特性 2015年发布的ES6堪称JavaScript历史上最具革命性的更新。但五年过去了,很多开发者对这些特性的理解仍停留在表面。让我们深入…...
Leather Dress Collection 实战:为开源项目自动生成 README 与贡献指南
Leather Dress Collection 实战:为开源项目自动生成 README 与贡献指南 你有没有过这样的经历?辛辛苦苦写好了一个开源项目,代码功能强大,架构清晰,但一想到要写 README、贡献指南、行为准则这些文档,头就…...
Nodezator高级widgets使用技巧:提升Python开发效率的10个秘诀
Nodezator高级widgets使用技巧:提升Python开发效率的10个秘诀 【免费下载链接】nodezator A generalist Python node editor 项目地址: https://gitcode.com/gh_mirrors/no/nodezator Nodezator是一款功能强大的Python节点编辑器,它通过直观的可视…...
FireRedASR Pro代码详解:从音频预处理到文本后处理全流程
FireRedASR Pro代码详解:从音频预处理到文本后处理全流程 1. 引言 如果你对语音识别感兴趣,想知道一段音频是怎么变成文字的,那么这篇文章就是为你准备的。我们这次不聊怎么用现成的工具,而是直接打开一个叫FireRedASR Pro的语音…...
智慧校园系统采购,如何平衡功能、价格与服务?
✅作者简介:合肥自友科技 📌核心产品:智慧校园平台(包括教工管理、学工管理、教务管理、考务管理、后勤管理、德育管理、资产管理、公寓管理、实习管理、就业管理、离校管理、科研平台、档案管理、学生平台等26个子平台) 。公司所有人员均有多…...
