kotlin数组和集合

article/2025/9/13 22:52:02

一、Kotlin数组

1.对象数组

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

fun main(args: Array<String>){
}

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

(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<String>(12)

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

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

//kotlin写法:
val params3 = Array<String>(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<String>(6)
var arr2Duble = arrayOfNulls<Double>(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<String> = 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<Int?>()   ArrayList<Int?>是能持有Int?类型值的列表,换句话说就是,可以持有Int或者是null。

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

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

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

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

2.只读集合和可变集合

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

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

集合类型只读可变
ListlistOfmutableListOf
arrayListOf
SetsetOfmutableSetOf
hashSetOf
linkedSetOf
sortedSetOf
MapmapOfmutableMapOf
hashMapOf
linkedMapOf
sortedMapOf

3.集合的使用

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

fun main(args: Array<String>) {val titleList = listOf<String>("推荐", "热点", "视频", "北京", "社会", "问答", "图片", "科技", "财经", "军事", "国际")//集合遍历的方法 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<String>) {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<String>) {//map和MutableMapvar goodsMap: Map<String, String> = mapOf("苹果" to "iphone8", "华为" to "Mate 10", "小米" to "小米9", "魅族" to "魅族Pro6s")//Pair方式初始化映射var goodsMutmap: MutableMap<String, String> = mutableMapOf(Pair("苹果", "iphone9"), Pair("华为", "荣耀10"), Pair("Vivo", "Vivox9"))//打印元素的总个数println(goodsMap.size)//获取某个key对应的valueprintln(goodsMap.get("苹果"))  //iphone8println(goodsMap.getOrDefault("11","不存在值"))  //不存在值//获取所有的key,和 valuefor (key in goodsMap.keys){println(key)}for (value in goodsMap.values){println(value)}//可以将map转换成mutablemapval toMutableMap = goodsMap.toMutableMap()toMutableMap["苹果"]="iphone x max"println(toMutableMap.get("苹果"))  //iphone x max//移除元素toMutableMap.remove("小米")//也是3种遍历map的方式 for-in forEach iteratorfor (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<String>) {//创建一个只读集合val list= listOf("str1","str2","str3")Sample.modifyCollection(list)
}

Java代码


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

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

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

如果改成可变集合,

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

就会依次打印出

str1
str2
str3
xxxx

2.

集合类型参数非空在Java中无法被约束
在前面说过kotlin的集合可以在泛型的类型参数上约束该集合中的元素是否是非空的,但是因为Java中并没有将类型分为可空类型和非空类型,所以Java可以向集合中加入null值,就像下面这样:

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

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

四、集合与数组互相转化

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

fun main(args: Array<String>) {//声明一个数组val array1 = arrayListOf("str1", "str2", "str3")//将数组转化为集合val list1 = array1.toList()//将集合转化为数组val array2 = list1.toTypedArray()
}

http://chatgpt.dhexx.cn/article/WvcEyfAu.shtml

相关文章

Java--数组和集合区别

一、数组 1、Java语言中的数组是一种引用数据类型&#xff1b;不属于基本数据类型 2、数组当中既可以存储“基本数据类型”的数据&#xff0c;也可以存储“引用数据类型”的数据&#xff08;数组既可以存储基本数据类型&#xff0c;又可以存储引用数据类型&#xff0c;基本数…

数组和集合的区别

一、数组声明了它容纳的元素的类型&#xff0c;而集合不声明。 二、数组是静态的&#xff0c;一个数组实例具有固定的大小&#xff0c;一旦创建了就无法改变容量了。而集合是可以动态扩展容量&#xff0c;可以根据需要动态改变大小&#xff0c;集合提供更多的成员方法&#xff…

数组和集合区别

一、数组声明了它容纳的元素的类型&#xff0c;而集合不声明。 二、数组是静态的&#xff0c;一个数组实例具有固定的大小&#xff0c;一旦创建了就无法改变容量了。而集合是可以动态扩展容量&#xff0c;可以根据需要动态改变大小&#xff0c;集合提供更多的成员方法&#xff…

Intellij idea 的tomcat原理讲解

作者: 陈宇超          纪念卓越班的日子 初次用idea的小白可能会很感到很神奇&#xff0c;intellij idea部署web项目在浏览器不需要输入项目名就可以直接访问&#xff0c;很是方便啊。那么 intellij 是如何实现这一功能的呢&#xff1f;在了解其原理之前需要掌握一定的…

Tomcat运行原理

Tomcat服务器本质 Tomcat是运行在JVM中的一个进程。通过处理scoket通信 (Socket) 来运行。Web项目的本质&#xff0c;是一大堆的资源文件和方法。Web项目没有入口方法(main方法)&#xff0c;意味着Web项目中的方法不会自动运行起来。Web项目部署进Tomcat的webapp中&#xff0c…

tomcat原理简要分析,java

tomcat原理 tomcat位置 tomcat实际上是部署在服务器上的&#xff1b; tomcat作用 tomcat服务器是一个Servlet和JSP容器&#xff0c;它响应HTML页面的访问请求。 实际上Tomcat是Apache 服务器的扩展&#xff0c;但运行时它是独立运行的&#xff0c;所以当你运行tomcat 时&#…

谈谈TOMCAT原理和机制

从服务器说起&#xff0c;一台装了操作系统&#xff08;linux、unix、win等等&#xff09;的物理机或者虚拟机不能称之为真正的服务器&#xff0c;因为服务器是能对外界提供服务的计算机&#xff0c;要能成为服务器必须借助其他软件的支持比如:tocmat、apache、IIS、nginx、jet…

Tomcat工作原理

本文以 Tomcat 5 为基础&#xff0c;也兼顾最新的 Tomcat 6 和 Tomcat 4。Tomcat 的基本设计思路和架构是具有一定连续性的。 Tomcat 总体结构 Tomcat 的结构很复杂&#xff0c;但是 Tomcat 也非常的模块化&#xff0c;找到了 Tomcat 最核心的模块&#xff0c;您就抓住了 Tom…

tomcat启动原理

前言 一直在用Tomcat&#xff0c;但是对其启动原理一直没去研究&#xff0c;这里准备去面试&#xff0c;可能会问道。于是总结了下启动原理。完全凭感觉去揣测&#xff0c;没工夫看源码。因此错误之处希望大家批评指正&#xff0c;大家共同进步。我想这也是在忙碌中进步最快的…

深入剖析Tomcat原理

深入剖析Tomcat原理 一、 Tomcat源码部署和运行&#xff08;intellij IDEA&#xff09; 1、下载tomcat源码&#xff0c;以tomcat-8为例 链接: https://tomcat.apache.org/ 2、源码部署到IDEA中 ①创建新的空工程 ②解压源码压缩包到该工程的目录&#xff08;目录名最好是非…

Springboot内置Tomcat原理

SpringBoot的启动主要是通过实例化SpringApplication来启动的&#xff0c;启动过程主要做了以下几件事情&#xff1a;配置属性、获取监听器&#xff0c;发布应用开始启动事件初、始化输入参数、配置环境&#xff0c;输出banner、创建上下文、预处理上下文、刷新上下文、再刷新上…

【springboot】自动整合Tomcat原理

通过前面我们会SpringBoot的自动配置机制、Starter机制、启动过程的底层分析&#xff0c;我们拿一个实际的业务案例来串讲一下&#xff0c;那就是SpringBoot和Tomcat的整合。 我们知道&#xff0c;只要我们的项目添加的starter为&#xff1a;spring-boot-starter-web&#xff…

总结:SpringBoot内嵌Tomcat原理

一、介绍 一般我们启动web服务都需要单独的去安装tomcat&#xff0c;而Springboot自身却直接整合了Tomcat&#xff0c;什么原理呢&#xff1f; 二、原理 SpringBoot应用只需要引入spring-boot-starter-web中这个依赖&#xff0c;应用程序就默认引入了tomcat依赖&#xff0c;其…

Tomcat的架构原理

一、前言 Tomcat服务器是一个开源的轻量级Web应用服务器&#xff0c;在中小型系统和并发量小的场合下被普遍使用&#xff0c;是开发和调试Servlet、JSP程序的首选。同时它是运行在JVM中的一个进程&#xff0c;包含Web容器&#xff0c;相当于是Web容器和JVM之间的中间件。 二、…

浅析tomcat原理

浅析tomcat原理 上上个星期&#xff0c;看了一下how tomcat works这本书&#xff0c;今天捡起来看一会&#xff0c;发现忘得有点快&#xff0c;特地写点东西&#xff0c;加深一下记忆。因为书讲的是tomcat4&#xff0c;5的内容&#xff0c;比较旧了&#xff0c;所以和最新的to…

Tomcat底层原理

一、Tomcat启动时到底对我们的应用程序做了什么&#xff1f; 当我们把一个应用程序的war包放到Tomcat的webapps目录后&#xff0c;启动Tomcat&#xff0c;然后就可以通过浏览器发送Http请求访问该war包内的Servlet了。 这个过程包括&#xff1a; 1、启动Tomcat 2、Tomcat处理H…

tomcat的工作原理以及简介

Tomcat简介 Tomcat是一个JSP/Servlet容器。其作为Servlet容器&#xff0c;有三种工作模式&#xff1a;独立的Servlet容器、进程内的Servlet容器和进程外的Servlet容器&#xff0c; 1.Tomcat是运行在JVM中的一个进程。它定义为【中间件】&#xff0c;顾名思义&#xff0c;是一个…

tomcat组成及工作原理

1 - Tomcat Server的组成部分 1.1 - Server A Server element represents the entire Catalina servlet container. (Singleton) 1.2 - Service A Service element represents the combination of one or more Connector components that share a single Engine Servic…

Tomcat工作原理介绍

Web应用程序都是靠Web服务器运行的&#xff0c;Tomcat是常用的Web服务器(兼具Servlet容器HTTP服务器功能)之一&#xff0c;此篇博客将从工作原理上来认识Tomcat。Tomcat作为Web服务器需要处理两类核心任务&#xff1a;处理 Socket 连接&#xff0c;负责网络字节流与Request和Re…

tomcat原理解析(一):一个简单的实现

一 概述 前段时间去面试&#xff0c;被人问到了tomcat实现原理。由于平时没怎么关注容器的实现细节&#xff0c;这个问题基本没回答上来。所以最近花了很多时间一直在网上找资料和看tomcat的源码来研究里面处理一个HTTP请求的流程。网上讲tomcat的帖子比较多&#xff0c;大多都…