新用户注册入口 老用户登录入口

[转载]Kotlin - 数组 Array

文章作者:转载 更新时间:2023-03-31 12:34:25 阅读数量:65
文章标签:Kotlin数组创建原生数组通用数组遍历
本文摘要:这篇文章详述了Kotlin中数组的创建与操作。首先,介绍了通过Array()声明通用数组以及原生类型IntArray、BooleanArray、CharArray等的创建方式,并举例说明如何使用arrayOf()和 arrayOfNulls()指定元素或长度初始化数组。在数组操作方面,文章列举了访问、修改元素的多种方法如get、set以及便捷操作符,同时介绍了plus、slice、fill、copyOf等方法对数组进行增删改查。对于数组遍历,提到了forEach循环、for循环结合indices属性以及withIndex()函数的使用。此外,还讨论了数组间的转换(如toIntArray、toTypedArray),排序(sort、sortedArray、sorted)以及多维数组的构建。最后,演示了数组转集合、字符串拼接及条件判断等实用功能。
转载文章

本篇文章为转载内容。原文链接:https://blog.csdn.net/HugMua/article/details/121866989。

该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。

作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。

如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。

创建数组

val 声明的数组只能改变元素

var 声明的数组可以改变引用

创建方式 举例

Array ()

通用数组

Array(size: Int, init: (Int) -> T)

val array: Array<Int> = Array(5) { i -> i * 2 }

5是数组长度,i是索引值,元素赋值为索引值*2

原生数组

IntArray (长度)

***Array (长度)

val ys1 = IntArray(5)        //元素都是0

val ys2 = BooleanArray(5)        //元素都是false

val ys3 = CharArray(5)        //元素都是空格

arrayOfXXX ()

指定元素(元素可为任意类型)

arrayOf ()

val array1: Array<Any> = arrayOf(1, '你', "hahaah", false)

for (element: Any in array1) print(element)

val array2: Array<Int> = arrayOf(1, 2, 3)

val array3: Array<Person> = arrayOf(person1, person2)

指定长度(元素都为null)

arrayOfNulls ()

val arrayNull: Array<String> = arrayOfNulls<String>(6)

空数组

emptyArray ()

val empty: Array<String> = emptyArray<String>()

原生数组(避免拆装箱开销)

intArrayOf ()

***ArrayOf ()

val array3: IntArray = intArrayOf(1, 3, 5, 7)

val array4: CharArray = charArrayOf('a', 'b', 'c')

原生数组 & 通用数组

为了避免不必要的拆装箱开销,或者与Java互操作,可以使用原生类型数组。这些类与Array没有继承关系,只是有相同的方法属性,因此 IntArray 和 Array<Int> 是完全不同的类型,但两者可以互转。

原生类型数组 对应Java中的基本数据类型数组

IntArray

***Array

int [ ]

*** [ ]

方法 说明 举例

toIntArray ()

to***Array ()

通用→原生

val ty: Array<Int> = arrayOf(1, 2, 3)

val toIntArray: IntArray = ty.toIntArray()

toTypedArray () 原生→通用

val ys: IntArray = intArrayOf(1, 2, 3)

val toTypedArray: Array<Int> = ys.toTypedArray()

Person[] people = {new Person(), new Person()};    //Java
val people: Array<Person> = arrayOf(Person(), Person())    //Kotlin

 遍历

val arr = arrayOf(1,2,3,4,5)//通过forEach循环
arr.forEach{println(it)
}//通过iterator循环
var iterable:Iterator<Integer> = arr.iterator();
while(iterable.hasNext()){println(iterable.next())
}
for(element in arr.iterator()){println(element)
}//for循环一
for(element in arr){println(element)
}//for循环二
for(index in 0..arr.size-1){println(arr[index])
}//for循环三
for(index in arr.indices){println(arr[index])
}//for循环四
for((index, value) in arr.withIndex()){println("$index位置的元素是:$value")
}// 上面写法等价于下面写法
for (element in arr.withIndex()) {println("${element.index} : ${element.value}")
}

操作

方法 说明

.size

.indices

数组长度

数组最大索引值

get (索引)

获取元素,推荐使用操作符 [ ]

arr[3]   等同于   arr.get(3)

set (索引,目标值)

给元素赋值,推荐使用操作符 [ ]

arr[3] = "哈"   等同于   arr.set(3,"哈")

plus (目标值)

增加:返回一个数组长度+1并用目标值赋值新元素的新数组,不对原数组进行改动

arr + 6  等同于  arr.plus(6)

slice (区间) 截取:返回一个截取该区间元素的新数组,不对原数组进行改动

fill (目标值)

fill (目标值,起始索引,结束索引)

修改:将该区间的元素赋值为指定值

copyOf ()

copyOf (个数)

copyOfRange (起始索引,结束索引)

返回一个 完全复制了原数组 的新数组

返回一个 正向复制原数组元素个数 的新数组,超过原数组大小的新元素值为null

返回一个 复制原数组该区间元素 的新数组,超过原数组索引范围报错

asList () 数组转集合

reverse ()

reversedArray ()

reversed ()

反转:将数组中的元素顺序进行反转

返回一个反转后的新数组,不对原数组进行改动

返回一个反转后的list,不对原数组进行改动

sort ()

sortedArray ()

sorted ()

排序:对数组中的元素进行自然排序

返回一个自然排序后的新数组,不对原数组进行改动

返回一个自然排序后的list,不对原数组进行改动

joinToString (字符串分隔符) 将***Array原生数组拼接成一个String,默认分隔符是“,”

all (predicate)

any (predicate)

全部元素满足条件返回 true,否则 false

任一元素满足条件返回 true,否则 false

val arr = arrayOf(1, 2, 3, 4, 5)
val cc = charArrayOf('你','们','好')
val brr = arrayOf(5,2,1,4,3)//数组长度
val num1 = arr.size //5
//最大索引
val num2 = arr.indices  //4
for (i in arr.indices) print(i) //01234
//条件判断
val boolean1 = arr.all { i -> i > 3 }  //false,不是全部元素>3
//增
val arr1 = arr.plus(6)   //123456,长度+1并赋值为6
val arr2 = arr + 6 //同上
//改
val arr3 = arr.slice(2..4)  //345
arr.fill(0) //00000,操作的是原数组
val str1 = cc.joinToString("")  //你们好
brr.sort()  //12345
val list1 = brr.sorted()   //返回一个排序后的list
val brr4 = brr.sortedArray()    //返回排序后的新数组
val arr5 = arr.copyOf() //12345
val arr6 = arr.copyOf(2) //12
val arr7 = arr.copyOfRange(2,4) //34

多维数组

//方式一:数组里面存的元素是数组
val aa = arrayOf(arrayOf(1, 2, 3),arrayOf(4, 5, 6))
print(aa[1][2]) //6
//方式二:元素为null但类型是数组
val bb = arrayOfNulls<Array<Int>>(2)

本篇文章为转载内容。原文链接:https://blog.csdn.net/HugMua/article/details/121866989。

该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。

作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。

如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。

相关阅读
文章标题:[转载][洛谷P1082]同余方程

更新时间:2023-02-18
[转载][洛谷P1082]同余方程
文章标题:[转载]webpack优化之HappyPack实战

更新时间:2023-08-07
[转载]webpack优化之HappyPack实战
文章标题:[转载]oracle 同时更新多表,在Oracle数据库中同时更新两张表的简单方法

更新时间:2023-09-10
[转载]oracle 同时更新多表,在Oracle数据库中同时更新两张表的简单方法
文章标题:[转载][Unity] 包括场景互动与射击要素的俯视角闯关游戏Demo

更新时间:2024-03-11
[转载][Unity] 包括场景互动与射击要素的俯视角闯关游戏Demo
文章标题:[转载]程序员也分三六九等?等级差异,一个看不起一个!

更新时间:2024-05-10
[转载]程序员也分三六九等?等级差异,一个看不起一个!
文章标题:[转载]海贼王 动漫 全集目录 分章节 精彩打斗剧集

更新时间:2024-01-12
[转载]海贼王 动漫 全集目录 分章节 精彩打斗剧集
名词解释
作为当前文章的名词解释,仅对当前文章有效。
原生类型数组在Kotlin中,原生类型数组是专门为特定基本数据类型设计的数组,如IntArray、BooleanArray和CharArray等。它们与通用Array类不同,原生类型数组在内存中存储的是对应类型的原始值,而非对象引用,因此避免了装箱和拆箱操作带来的性能开销,尤其适合处理大量数据或需要高效内存访问的场景。
拆装箱(Boxing and Unboxing)在编程语言中,拆装箱是指将基本数据类型(如整型、字符型)与对应的包装器对象(如Integer、Character)之间进行转换的过程。在Kotlin中,使用原生类型数组可以有效避免对基本数据类型进行不必要的拆箱和装箱操作,提高程序运行效率。
遍历(Traversal)遍历是一种常见的编程操作,指的是按照某种顺序访问集合(如数组、列表、映射等)中的每个元素,并执行相应的操作。在本文中提到的Kotlin数组遍历方式包括使用for循环结合indices属性、通过iterator迭代器以及使用forEach高阶函数等方式。
自然排序(Natural Sorting)自然排序通常是指根据数据本身的特性(例如数字大小、字符串字典序等)进行升序或降序排列的一种排序方法。在Kotlin中,数组可以通过sort()、sortedArray()和sorted()方法实现自然排序,这些方法会基于元素的Comparable接口实现进行排序,无需程序员显式指定比较规则。
反转(Reversal)反转数组操作指的是改变数组元素原有的顺序,即将数组的最后一个元素移动到第一个位置,第一个元素移动到最后一个位置,依次类推,最终得到一个元素顺序颠倒的新数组。在Kotlin中,可以使用reverse()、reversedArray()和reversed()方法来实现数组的反转操作。
排序算法(Sorting Algorithms)排序算法是一系列用于将一组数据按照特定顺序排列的方法。在Kotlin中,数组的sort()方法内部实现了一种高效的排序算法,能够自动对数组元素进行排序,而sortedArray()和sorted()方法则返回一个新的已排序数组,不影响原有数组内容。这些排序方法默认采用自然排序,对于自定义排序逻辑,可以通过传递Comparator作为参数实现。
延伸阅读
作为当前文章的延伸阅读,仅对当前文章有效。
在深入了解了Kotlin中数组的创建、操作与转换后,我们可以进一步探索如何在实际开发场景中高效运用这些特性。近期,随着Android Studio 2021.3版本的发布,Kotlin迎来了1.6.0版本更新,其中对数组API进行了优化和增强,例如引入了新的构造函数以及改进了与Java平台互操作时的性能表现。
在实际项目中,Google推荐开发者优先使用原生类型数组以提升性能,尤其是在处理大量数据或高性能要求的应用场景。例如,在游戏开发中,通过Kotlin的IntArray优化图形渲染的数据结构可以有效减少内存分配和GC压力,从而提升整体流畅度。
此外,对于多维数组的处理,Kotlin提供了一种更为灵活且易于理解的解构声明语法,允许开发者更直观地访问和操作多级嵌套数组中的元素。同时,结合Kotlin的高阶函数如map、filter等,可以在不引入额外复杂度的情况下对数组进行复杂的变换操作。
深入研究Kotlin官方文档和社区论坛,你会发现更多有关数组的最佳实践案例,包括如何结合协程进行异步数组操作,以及如何利用Kotlin的扩展函数简化数组操作代码。而在机器学习或大数据处理领域,利用Kotlin的Numpy-like库koma可以实现类似Python Numpy对多维数组的强大支持,这对于科学计算和数据分析尤为重要。
总之,掌握Kotlin数组的各种特性并适时关注其最新进展,能够帮助开发者在日常编码工作中更加游刃有余,提高应用程序的运行效率和代码可读性。
知识学习
实践的时候请根据实际情况谨慎操作。
随机学习一条linux命令:
getent passwd username - 从passwd数据库获取用户信息。
随便看看
拉到页底了吧,随便看看还有哪些文章你可能感兴趣。
响应式抖音课程培训学院类企业前端模板下载 01-21 jQuery点击显示隐藏更多文字内容插件 01-15 黑色设计师简历响应式网页模板下载 01-14 [转载]Tomcat启动时卡在“ Deploying web application directory ”很久的解决方法 12-19 Saiku LDAP集成登录失效问题:排查配置错误、身份验证及解决方案实操 12-01 Spring Cloud微服务架构中注册中心的必要性与服务间通信实践:服务发现、API契约与高可用性考量 11-23 MahoutIllegalArgumentException在Apache Mahout中的应用场景:矩阵维度不匹配与向量索引异常解析及参数有效性的API调用实践 10-16 [转载]Docker 相关配置文件路径 09-08 蓝色精品美容整形机构网站模板 08-29 本次刷新还10个文章未展示,点击 更多查看。
Gradle在持续集成中的关键作用:自动化构建、依赖管理与多项目构建实践及CI服务器集成 07-06 化妆品购物商城通用网站模板下载 06-27 响应式建筑装饰设计类企业前端CMS模板下载 04-14 微服务架构下用户认证鉴权:网关层统一处理与服务内部处理的比较及选择考量 04-09 响应式会议活动主题着陆页网站模板 03-24 Tomcat内存泄漏问题在Web应用程序中的解决方案:Servlet上下文管理、全局变量引用与弱引用实践及监控工具应用 03-15 Kafka消费者消费偏移量设置:auto.offset.reset策略与手动控制方法详解 02-10 [转载]JavaScript中的时间与日期、正则表达式和Function类型 01-24 大气简洁手机电子产品展示柜台前端模板 01-22 项目案例展示设计公司企业网站模板 01-18 Bootstrap博客后台管理系统网站模板 01-08
时光飞逝
"流光容易把人抛,红了樱桃,绿了芭蕉。"