kotlin数组和集合

kotlin数组和集合一 Kotlin 数组 1 对象数组由 Kotlin 的 main 函数的写法 可以看出 Kotlin 中的对象数组写法与泛型的写法很像 funmain args Array lt String gt 声明对象数组的三种形式 1 使用 arrayOf 函数和指定的数组元素创建数组 Java 写法 String params1 str1 str2 str

一、Kotlin数组

1.对象数组

由Kotlin的main函数的写法,可以看出Kotlin中的对象数组写法与泛型的写法很像。

fun main(args: Array

){


}



声明对象数组的三种形式:

(1)使用arrayOf函数和指定的数组元素创建数组

//Java写法: String[] params1 = {"str1", "str2", "str3"}; //kotlin写法: val params1 = arrayOf("str1", "str2", "str3") 

(2).使用arrayOfNulls函数创建一个指定大小的并初始化每个元素为null的数组

//Java写法: String[] params2 = new String[12]; //kotlin写法: val params2 = arrayOfNulls 
  
    (12) 
  

(3)Array构造方法指定数组大小和一个生成元素的lambda表达式

这种方法创建的数组,其中的每个元素都是非空的,就像下面这样:

//kotlin写法: val params3 = Array 
  
    (3){i -> "str" + i } // 也可以这么写 val params=Array(3){"str$it"} 
  

因为数组的原始大小已经确定,在lambda表达式中接收数组的下标,并返回一个该下标位置的值。

2.基本数据类型的数组

var arr1 = arrayOf("java", "kotlin") var arrInt = arrayOf(1, 2, 3) //创建指定长度,元素为null的数组 var arr2 = arrayOfNulls 
  
    (6) var arr2Duble = arrayOfNulls 
   
     (5) arr2.set(0, "java") arr2[1] = "Kotlin" val intArray: IntArray = intArrayOf(1, 2) val charyArray:CharArray= charArrayOf('H','E','T','Y','W','K','B') val strArray:Array 
    
      = arrayOf("Hello","Kotlin") 
     
    
  

还有ByteArray、ShortArray、LongArray、FloatArray、DoubleArray、BooleanArray

数组遍历

for (char in charyArray){ println(char+"cccc") }

替换值

arr2.set(0, "java") arr2[1] = "Kotlin"

字符数组转换成字符串

charyArray.joinToString

二、集合

1.集合与可空性

前边我们知道如果一个变量可以为空,我们在定义的时候就在该变量前边加个?,来表示该变量的值可为null。同样集合也可以事先在定义的时候知道是否持有null元素。对于一个集合,我们也应该考虑到,这个集合是否可以存储null值,对应于有包含可空值的集合和包含非空值的集合。

举例     val result=ArrayList

()   ArrayList

是能持有Int?类型值的列表,换句话说就是,可以持有Int或者是null。

这里需要注意的是,变量自己类型的可空性和用作类型参数的类型的可控性是有区别的。 即包含可空Int列表和包含Int的可空列表

包含可空的int列表 :(指的是列表中单个值是可空的),列表本身始终不为null,但是列表中的每个值都可以为null,

包含int的可空列表:(指的是整个列表是可空的) 可能包含空引用,而不是列表实例,但列表中的元素保证是非空的

所以要小心决定是集合的元素还是集合本身可空。

2.只读集合和可变集合

Kotlin的集合设计与Java不同的是,它把访问集合数据的接口和修改集合数据的接口分开了。这种区别存在于最基础的使用集合的接口之中,Kotlin.collections.Collection。使用这个接口,可以遍历集合中的元素、获取集合的大小、判断集合中是否包含某个元素,以及执行其他从该集合中读取数据的操作。但是这个接口没有任何添加或移除元素的方法。

使用Kotlin.collections.MutableCollections接口可以修改集合中的数据。它继承了普通的Kotlin.collections.Collection接口,还提供了方法来添加和移除元素、清空集合等。

集合类型 只读 可变
List listOf mutableListOf
arrayListOf

Set setOf mutableSetOf
hashSetOf
linkedSetOf
sortedSetOf






MapmapOfmutableMapOf
hashMapOf
linkedMapOf
sortedMapOf






3.集合的使用

声明一个集合并进行遍历,遍历的方式有4种

fun main(args: Array 
  
    ) { val titleList = listOf 
   
     ("推荐", "热点", "视频", "北京", "社会", "问答", "图片", "科技", "财经", "军事", "国际") //集合遍历的方法 for-in forEach 迭代器遍历 for (i in titleList.indices) { val item = titleList[i] println(item) } for (title in titleList) { println(title+"//") } val iterator=titleList.iterator() while (iterator.hasNext()){ val item=iterator.next() println(item+"//") } //forEach遍历 内部使用it指代每条记录 titleList.forEach { println(it + "") } } 
    
  

使用filter来过集合

fun main(args: Array 
  
    ) { val fruits = listOf("banana", "avocado", "apple", "kiwifruit") fruits.filter { it.startsWith("a") } .sortedBy { it } .map { it.toUpperCase() } .forEach { println(it) //集合遍历的方法 for-in forEach 迭代器遍历 } APPLE AVOCADO 
  

使用map集合

只读Map

可变的MutableMap

fun main(args: Array 
  
    ) { //map和MutableMap var goodsMap: Map 
   
     = mapOf("苹果" to "iphone8", "华为" to "Mate 10", "小米" to "小米9", "魅族" to "魅族Pro6s") //Pair方式初始化映射 var goodsMutmap: MutableMap 
    
      = mutableMapOf(Pair("苹果", "iphone9"), Pair("华为", "荣耀10"), Pair("Vivo", "Vivox9")) //打印元素的总个数 println(goodsMap.size) //获取某个key对应的value println(goodsMap.get("苹果")) //iphone8 println(goodsMap.getOrDefault("11","不存在值")) //不存在值 //获取所有的key,和 value for (key in goodsMap.keys){ println(key) } for (value in goodsMap.values){ println(value) } //可以将map转换成mutablemap val toMutableMap = goodsMap.toMutableMap() toMutableMap["苹果"]="iphone x max" println(toMutableMap.get("苹果")) //iphone x max //移除元素 toMutableMap.remove("小米") //也是3种遍历map的方式 for-in forEach iterator for (item in goodsMutmap) { println(item.key + "") println(item.value + "/") } val iterator = goodsMutmap.iterator() while (iterator.hasNext()){ val item=iterator.next() println(item.key + "") println(item.value + "/") } // 使用forEach遍历 goodsMap.forEach { key, value -> println(key) println(value) } goodsMutmap.forEach { key, value -> println(key) println(value) } } 
     
    
  

三、Kotlin集合与Java集合互调

Kotlin中创建的集合可以直接传递给Java方法进行操作。

Java集合调用Kotlin集合

fun main(args: Array 
  
    ) { //创建一个只读集合 val list= listOf("str1","str2","str3") Sample.modifyCollection(list) } 
  

Java代码

 public class Sample { public static void modifyCollection(Collection 
  
    collection) { if (collection != null) { collection.add("xxxx"); } for (String x:collection){ System.out.println(x); } } } 
  

编译运行Kotlin代码,会抛出异常

kotlin数组和集合

Kotlin中的只读集合在Java中无法被约束。

如果改成可变集合,

val list= mutableListOf("str1","str2","str3")

就会依次打印出

2.

//kotlin代码 fun main(args: Array 
  
    ) {     val list1: MutableCollection 
   
      = mutableListOf("str1", "str2", "str3")     //报错,元素必须是非空的     //list1.add(null)     Sample.modifyCollection(list1) } //Java代码 import java.util.Collection; public class Sample {     public static void modifyCollection(Collection 
    
       collection){         if (collection != null){             //Java可以向集合中添加null值             collection.add(null);         }     } } 
     
    
  

 由此可以看出,Kotlin只能在Kotlin相关的编译层面去判断约束非空条件。

四、集合与数组互相转化

最后再补充一下,可以将集合类型和数组类型进行相互,在编码过程中我们经常会用到:

fun main(args: Array 
  
    ) {     //声明一个数组     val array1 = arrayListOf("str1", "str2", "str3")     //将数组转化为集合     val list1 = array1.toList()     //将集合转化为数组     val array2 = list1.toTypedArray() } 
  
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/223997.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午12:56
下一篇 2026年3月17日 下午12:56


相关推荐

  • ora00904::标识符无效_ora-00911 无效字符

    ora00904::标识符无效_ora-00911 无效字符ORA:即Oracle报错。标识符无效:SQL语句中,这个字段名不在表中。解决方案:修改SQL语句中对应的字段或者修改表里面对应的列名。在这里我想说一下,因为我用的是hibernate内部封装好的save方法,咱也不能去改人家的底层方法是不是,所以我在这里用到一个注解(@Column)去指定SQL要执行的字段我第一次用的时候放在了这里↑但是没什么效果,然后我就把这个注解(@Column)放到getset方法上,问题就解决了。我的问题已经解决,也希望能帮到大家。…

    2025年8月3日
    3
  • [数分笔记]关于有限覆盖定理

    [数分笔记]关于有限覆盖定理1 定理 设 I 为有界闭区间 U 为 I 的一个开覆盖 则 s t 2 两个关键点 1 被覆盖区间必须是闭区间 2 覆盖闭区间的区间 区间系必须是开区间 3 闭区间的这一性质 称为紧性 4 在拓扑的基本概念中 最令人费解的 莫过于 紧性 Compactness 它描述一个空间或者一个集合 紧不紧 正式的定义是 如果一个集合的任意开覆盖都有有限子覆盖 那么它是紧的 乍一看

    2026年3月16日
    3
  • linux ldd命令源代码,Linux中ldd命令的用法详解[通俗易懂]

    linux ldd命令源代码,Linux中ldd命令的用法详解[通俗易懂]Linux中ldd命令主要用于查看程式运行所需的共享库,那么ldd命令具体要如何使用呢?下面小编就给大家介绍下Linux下ldd命令的使用方法,感兴趣的朋友一起来学习下吧。ldd命令用于判断某个可执行的binary档案含有什么动态函式库LinuxLdd参数说明:–version  打印ldd的版本号-v–verbose  打印所有信息,例如包括符号的版本信息-d–data-relo…

    2022年5月6日
    215
  • kali安装中文输入法(本人一遍成功)

    kali安装中文输入法(本人一遍成功)kali 中文输入法安装 以下所有操作在你已经换源的情况下完成 首先 安装 ibus 到系统中 apt getinstallib pinyin 安装中选择是否继续输入 Y 然后开始下载下载后在命令窗口输入 reboot 重启然后在右上角会出现语言的选项接下来就成功了

    2026年3月17日
    2
  • Linux Samba PDC – Domain Model

    Linux Samba PDC – Domain Model

    2021年8月1日
    66
  • flask部署到nginx_flask部署404

    flask部署到nginx_flask部署404文章目录1.什么是uWSGI?2.uWSGI配置2.1启动一个HTTP服务器2.2并发和监控2.3启动uWSGIweb服务器2.4django中部署uWSGI2.5flask中部署uWSGI2.6web2py中部署uWSGI3.注意事项3.1虚拟环境3.2安全性和可用性4.参考文献1.什么是uWSGI?推荐这个博文uwsgi、wsgi和nginx的区别和关系一个…

    2025年11月2日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号