Key可以看成是Value 的索引,作为key的对象在集合中不可重复(uniq)。 如果我们从数据结构的本质上来看,其实List就是Key是Int类型下标的特殊的Map。...Kotlin中的Map与List、Set一样,Map也分为只读Map和可变的MutableMap。 Map没有继承于Collection接口。其类图结构如下: ?...5.5.2 创建Map 跟Java相比不同的是,在Kotlin中的Map区分了只读的Map和可编辑的Map(MutableMap、HashMap、LinkedHashMap)。...defined in kotlin.text map[1]="a" ^ error: no set method providing array access map[1]="a" ^ 因为在不可变... 把一个只读的Map转换为可编辑的MutableMap。
但是,您应该知道大多数默认构造函数都会创建哈希表(例如 Java 中的?LinkedHashMap)。 支持 Kotlin Maps 的不变性 有趣的是,Kotlin 中maps的标准接口是不可变的。...不可变对象更容易推理。他们不太容易出现意外错误。您应该尽可能多地使用不可变对象。 话虽如此,有时您确实必须构建可变对象。在 Kotlin 中有第二个接口?MutableMap,它提供写操作。...完成后,最好将其转换为不可变映射以防止进一步修改。...Kotlin 鼓励?空安全。这就是为什么返回类型被清楚地标记为可空类型的原因。它强制您处理该值可能为空的事实以防止运行时异常。 空安全强制您处理值可能为空的事实以防止运行时异常。...如您所见,可读性是 Kotlin 的一个重要因素。 迭代器是一个基本的构建块。最重要的是,还有很多其他方法可以查看maps并按照您想要的方式对其进行操作。
因为种种原因,谷歌把Android的第一开发语言改成了Kotlin。虽然近来用Java编写Android是是非常便利的。...但是经过多次更新后,Java在Android方面的用处肯定会比不上Kotlin,所以有必要学习一下Kotlin。...可以直接在{}中使用,不需要我们定义 ary.forEach{ print(it) } 三、字符串 1、字符串与基本类型的转换 1.1、除转换为...等 1.2、转换为Char toCharArray() 2、字符串的常用方法 var str:...不能用下标访问 容器内元素为唯一的,如果添加的元素与容器内元素哈希码相同,则会把元素覆盖 元素不可修改
kotlin中的集合 Kotlin中的集合分为两派:可变集合与不可变集合 ?...列表:List/MutableList; 集:Set/MutableSet; 映射:Map/MutableMap; 集:Collection/MutableCollection; 迭代器:Iterable.../MutableIterable; 所谓可变就是支持读、写、删,不可变只支持读 我们从下面详细对比中可以发现: public interface Collection : Iterable...public interface Map{...} public interface MutableMap : Map {...} ?...尽管如此Kotlin并没有止步,而是在此基础上增加了很多方法,如: 获取列表中的最后一个元素,或者得到一个数字列表的最大值: val strings = listOf("first",
1.2变量转换 Kotlin中进行数据转换和Java中不同,就不一一对比了,直接说Kotlin中如何进行数据类型转换,Kotlin中都是使用类型转换函数来进行数据类型转换的,让我们来认识一下,如下表 Kotlin...的数据类型转换函数 转换函数说明 toInt 转换为整型 toLong 转换为长整型 toFloat 转换为浮点数 toDouble 转换为双精度数 toChar 转换为字符 toString 转换为字符串...,Kotlin中不存在名为StringArray的数组类型,因为String是一种特殊的基本数据类型,要想在Kotlin中声明字符串数组,得使用Array类型,同时,分配字符串数组的方法也变成了...isEmpty 判断该容器是否为空。 isNotEmpty 判断该容器是否非空。 clear 清空该容器。 contains 判断该容器是否包含指定元素。...因为Set是只读集合,初始化赋值后便不可更改,所以元素变更的方法只适用于可变集合MutableSet,但MutableSet的变更操作尚有以下限制 (1)MutableSet的add方法仅仅在集合中添加元素
split()返回的是一个String[], 而 kotlin中返回的是一个 List (2)、字符串模板和拼接 (3)、如何显示货币符号$ 4、容器 (1)、容器的基本操作 A: 分类: 分为可变和不可变...不可变的容器:Set、List、HashMap 可变的容器:MutableSet、MutableList、MutableHashMap B: 通用方法 isEmpty —— 是否为空 isNotEmpty...—— 是否非空 clear —— 清空容器 contains —— 是否包含指定元素 count —— 获取元素个数/ 也可以通过 size 获取 C: 容器初始化 kotlin中的容器可以在定义的时候就执行初始化赋值操作...,MutableSet可变(所以,后面的几个特点是针对MutableSet的) MutableSet中的 add 方法仅添加元素,但不知道添加到了哪个位置 MutableSet没有修改元素值的方法,元素被添加之后不可被修改...,而是元素的地址,类似于C中的指针。
Kotlin号称全面兼容Java,于是乎Java的容器类仍可在Kotlin中正常使用,包括大家熟悉的队列ArrayList、映射HashMap等等。...不过Kotlin作为一门全新的语言,肯定还是要有自己的容器类,不然哪天Java跟Kotlin划清界限,那麻烦就大了。...Kotlin对修改操作很慎重,比如变量用val前缀表示不可修改,用var前缀表示允许修改;类默认是不允许继承的,只有添加open前缀才允许该类被继承;至于容器默认为只读容器,如果需要进行修改则需加上Mutable...既然Set/List/Map都属于容器,那么必定拥有相同的基本容器方法,具体说明如下: isEmpty : 判断该容器是否为空。 isNotEmpty : 判断该容器是否非空。...in条件,即可轻轻松松依次取出集合中的所有元素。
5.3.5 闭包 5.3.6 匿名函数 5.4 特色功能 5.4.1 函数拓展和属性拓展(Extensions) 5.4.2 属性代理 5.4.3 委托(Delegate) 5.4.4 空指针安全...6.4.2 kotlin.Nothing 6.4.3 kotlin.Unit 6.4.4 kotlin.KClass 6.5 可空类型(Nullable Types) 6.6 函数类型(...与Java互操作(Interoperability) 9.1 使用工具互相转换 9.1.1 将 Java 转换为 Kotlin 9.1.2 将 Kotlin 转换为 Java 9.1.3 兼容 Java...object 9.3.5 包级别函数 9.3.6 重载必须使用override 第10章 集合类与泛型 10.1 Kotlin集合类 10.1.1 不可变集合类 10.1.1.1 List...10.1.1.2 Set 10.1.1.3 Map 10.1.2 可变集合类 10.1.2.1 MutableList 10.1.2.2 MutableSet 10.1.2.3 MutableMap
Kotlin没有去重复造轮子(Scala则是自己实现了一套集合类框架),而是在Java 类库的基础上进行了改造和扩展,引入了不可变集合类,同时扩展了大量方便实用的功能,这些功能的API 都在 kotlin.collections...7.1.2 Kotlin 集合类继承层次 下面是 Kotlin 中的集合接口的类图 ? Kotlin 集合类继承层次 其中各个接口说明如下表所示 接口 功能 Iterable 父类。...它提供写入的函数,如:add、remove或clear等 List 最常用的集合,继承Collection接口,元素有序,只读不可变 MutableList 继承List,支持添加和删除元素,除了拥有List...在 Map 映射表中 key(键)是唯一的 MutableMap 支持添加和删除元素的Map 7.2 不可变集合类 List 列表分为只读不可变的 List 和 可变 MutableList (可写入删除数据...Set 集合类图 Kotlin中的Map与List、Set一样,Map也分为只读Map和可变 MutableMap(可写入删除数据)。Map没有继承于Collection接口。其类图结构如下 ?
中的优化 Kotlin提供了一些优化和特性来简化和高效地操作常见的数据结构,如 List 和 Map。...操作符重载: 你可以使用标准库中的高阶函数、扩展函数和操作符重载来高效地操作列表。...// 创建不可变映射 val map: Map = mapOf("a" to 1, "b" to 2, "c" to 3) // 创建可变映射 val mutableMap:...MutableMap = mutableMapOf("x" to 10, "y" to 20) mutableMap["z"] = 30 // 使用扩展函数 val keys...同时,通过深入使用Kotlin标准库中的扩展函数和特性,我们也可以大大简化代码并提高其可读性和可维护性。
四. kotlin 和 java 互转 4.1 kotlin 转 java 选中导航栏: 右键 -> Tools -> Kotlin -> Show Kotlin Bytecode -> Decompile...4.2 java 转 kotlin 选中文件标签: 右键 -> Convert Java File To Kotlin File ? 查看 Kotlin 字节码 ? 五....: 作用是当数据非空时,直接返回数据,而当数据为空时,返回合并到的数据。利用该运算符,可以很容易的把可空类型转换为非空类型,详细代码如下: if(foo!...Kotlin 中 !! 表示非空断言运算符,详细代码如下: if(foo!...="abc" foo=null // 编译成功 foo可为空 var foo="abc" foo=null // 编译失败 foo不可以为空 六.
在链式调用中,我们可以考虑使用它,从而不用破坏链式。...下面结合工作中遇到的情形,总结出一些方法以便我们更好地使用 Scope Functions。...在 Kotlin 中借助 Elvis 操作符配合安全调用符,实现简单清晰的空检查和空操作。 //根据client_id查询 request.deviceClientId?....let { //签名之后发送事件 val bodyMap = JSON.toJSON(event) as MutableMap...let { //签名之后发送事件 val bodyMap = JSON.toJSON(event) as MutableMap<String
注意是不可变属性不是静态属性 var是可变属性,可以不初始化,可以多次赋值 在kotlin中不像java,基本数据类型可以用小写的boolean声明。这里必须用他的装箱类来定义。...Kotlin中不存在隐式转换,如: short s = 0; int i = 0; long l = 0; i = s;...,但是在Kotlin中却不可以 ?...length //正确,强制认定nullable不可空 nullalbe?.length //正确,若nullable为空,返回空 7. 智能类型转换 下面来看: if (name !...main(){ Parent parent=new Child() ((Chlid)parent).age } 只有强转才能调用子类的方法,但是在Kotlin中却不用 如下: val parentA
如果一个不可变的局部变量或属性已经判断出为某类型,那么检测后的分支中可以直接当作该类型使用,无需显式转换: fun getStringLength(obj: Any): Int?...is String -> print("这不是String类型的数据") else -> print("else类似于Java中的default") } } 空对象检查Null...预先了解一个可变集合的只读视图和一个真正的不可变集合之间的区别是很重要的。 Kotlin 的 List 类型是一个提供只读操作如 size、get等的接口。...这一模式同样适用于 Set/MutableSet 及 Map/MutableMap。...Kotlin 没有专门的语法结构创建 list 或 set。 要用标准库的方法,如 listOf()、 mutableListOf()、 setOf()、 mutableSetOf()。
与Java相反,其他的开发语言,如Kotlin、Swift、Groovy等,能够区分允许指向空值的变量和不允许指向空值的变量。...例如,如果我们在内存中已经有一个用户集合,我们想在进入存储库之前搜索这个集合,那么我们可以做以下工作: Optional.stream允许将可选的转换为至多一个元素的流。...Kotlin's 语言中Null类型安全 与Java不同的是,Kotlin语言的类型系统支持可空类型,这意味着除了数据类型的通常值外,还可以表示特殊值null的类型。默认情况下,所有变量都是不可空的。...Nullable Chaining 与Java中的Optionals 一样,Kotlin中的可空值也可以通过使用例如null-safe调用操作符进行链接。...其他现代语言,如Kotlin和Swift,被设计成能够区分允许表示空值的类型和不允许表示空值的类型。此外,它们提供了一组丰富的特性来处理可空变量,从而最小化空引用异常的风险。
在谈Kotlin的优势的时候,大家都会想到空指针安全这一点,那么Kotlin又是如何避免这些问题的呢?下面从Kotlin的一些语法规则上给出介绍。...name 非空断言 有时候,要将可空的变量转成非空的, 常见于Java, 我们知道变量是不可能为 null 的, 可以用非空断言 !!。例如: val nullableString: String?...Int 原理 为了更好的理解Kotlin空指针的原理。下面来看一下Kotlin是如何利用工具给开发者在编译前给出提示的。...Kotlin采用了一种不同的null处理方式。它对可空类型和不可空类型作了区分,可空的类型后面会跟一个问号,比如Bar?,而Bar类型的变量则不可为空。...于是,在Kotlin中,上述Java代码就变成了下面这样: public fun foo(bar : Bar) { /*…*/ } Kotlin非常简洁且富有表现力。这从上面的例子可见一斑。
在谈Kotlin的优势的时候,大家都会想到空指针安全这一点,那么Kotlin又是如何避免这些问题的呢?下面从Kotlin的一些语法规则上给出介绍。...name 非空断言 有时候,要将可空的变量转成非空的, 常见于Java, 我们知道变量是不可能为 null 的, 可以用非空断言 !!。例如: val nullableString: String?...Int #原理 为了更好的理解Kotlin空指针的原理。下面来看一下Kotlin是如何利用工具给开发者在编译前给出提示的。...Kotlin采用了一种不同的null处理方式。它对可空类型和不可空类型作了区分,可空的类型后面会跟一个问号,比如Bar?,而Bar类型的变量则不可为空。...于是,在Kotlin中,上述Java代码就变成了下面这样: public fun foo(bar : Bar) { /*…*/ } Kotlin非常简洁且富有表现力。这从上面的例子可见一斑。
集合中的函数式 API 虽然 Kotlin Collection 中的函数式 API 类似于 Java 8 Stream 中的 API。但是 Kotlin 的集合跟 Java 的集合并不一致。...Kolin 的集合分为可变集合(mutable collection)和不可变集合(immutable collection)。...不可变集合是 List、Set、Map,它们是只读类型,不能对集合进行修改。...可变集合是 MutableList、MutableSet、MutableMap,它们是支持读写的类型,能够对集合进行修改的操作。...性能 大多数终端操作符是 inline 函数 对于值可能不存在的情况,Sequence 支持可为空的类型,而 Stream 会创建 Optional包装器。因此会多一步的对象创建。
类型可以确认一个值或者一组值具有特定的意义和目的(虽然某些类型,如抽象类型和函数类型,在程序运行中,可能不表示为值)。...在kotlin源码工程中如下图所示: ?...Kotlin 处理数字在某种程度上接近 Java,但是并不完全相同。例如,对于数字没有隐式拓宽转换( Java 中 int 可以隐式转换为long),另外有些情况的字面值略有不同。...同样Char也支持转意字符\n、\b、\r等跟Java中的差不多: 字符字面值用单引号括起来: '1'。 特殊字符可以用反斜杠转义。...字符串是不可变的。
空安全 在Java中,NullPointerException异常十分常见 而Kotlin的优点则是可以尽可能避免执行代码时出现的空指针异常 /** * 1....可空类型与非空类型 * 在Kotlin中,有两种情况最可能导致出现NullPointerException **/ // 情况1:显式调用 throw NullPointerException(...操作符将任何值转换为非空类型,若该值为空则抛出异常 var a = null a!!...// 抛出KotlinNullPointerException // 情况3:数据类型不能为null // 在 Kotlin 中,类型系统区分一个引用可以容纳 null (可空引用) 和 不能容纳(非空引用...) // 如:String类型变量不能容纳null // 若要允许为空,可声明一个变量为可空字符串:在字符串类型后面加一个问号?
领取专属 10元无门槛券
手把手带您无忧上云