首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

《Kotlin 极简教程 》第5章 集合类(2)

5.5.2 创建Map 跟Java相比不同的是,在Kotlin中的Map区分了只读的Map和可编辑的Map(MutableMap、HashMap、LinkedHashMap)。...LinkedHashMap保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录是先插入的记录。简单说,LinkedHashMap是有序的,它使用链表维护内部次序。...我们在使用Kotlin创建Map的时候,实际上大部分都是调用Java的Map的方法。 下面我们就来介绍Map的创建以及基本操作函数。 mapOf() 创建一个只读空Map。...Kotlin直接使用的是Java的HashMap。...标准库中的集合类List、Set、Map,以及它们扩展的丰富的操作函数,这些函数使得我们使用这些集合类更加简单容易。

2.1K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Kotlin Collection VS Kotlin Sequence VS Java Stream

    其实,Kotlin 的 Sequence 更类似于 Java 8 的 Stream,二者都是延迟执行。Kotlin 的集合转换成 Sequence 只需使用asSequence()方法。...} .forEach (::println) 在 Kotlin 1.2.70 的 release note 上曾说明: 使用 Sequence 有助于避免不必要的临时分配开销,...OpenJDK 提供的基准测试工具 JMH 进行测试,它可以在方法层面进行基准测试。...支持 跨平台 支持 Kotlin/JVM、Kotlin/JS、Kotlin/Native 等多平台 只能在 Kotlin/JVM 平台使用,并且 jvm 版本需要>=8 易用性 更简洁、支持更多的功能...性能 大多数终端操作符是 inline 函数 对于值可能不存在的情况,Sequence 支持可为空的类型,而 Stream 会创建 Optional包装器。因此会多一步的对象创建。

    67621

    Kotlin Maps:五个基本函数

    此外,Kotlin 添加了一些额外的功能,使maps使用起来更加方便。 在这篇文章中,我谈论的是maps的基础知识。我将向您展示处理maps时最常用的函数。...Kotlin 中maps的用途 在使用maps之前了解什么是maps。本质上,映射是键值对的集合。关键是标识符。您可以使用它来查找集合中的特定元素。该值是您要存储的数据,它与一个键相关联。...在 Kotlin 中有第二个接口?MutableMap,它提供写操作。每当您需要修改maps内容时,请使用此方法。完成后,最好将其转换为不可变映射以防止进一步修改。...由于 Kotlin 的简洁语法,初始化一个新maps就像执行以下操作一样简单: val numbers: MutableMap = mutableMapOf( "one...Kotlin 鼓励?空安全。这就是为什么返回类型被清楚地标记为可空类型的原因。它强制您处理该值可能为空的事实以防止运行时异常。 空安全强制您处理值可能为空的事实以防止运行时异常。

    2.4K10

    第7章 集合类第7章 集合类

    另外,在Kotlin中集合类不仅仅能持有普通对象,而且能够持有函数类型的变量。...这就是面向对象范式混合函数式编程的自由乐趣吧! 本章将介绍Kotlin标准库中的集合类,我们将了解到它是如何扩展的Java集合库,使得写代码更加简单容易。...Map 映射中存储的每个对象都有一个相关的关键字(Key)对象,关键字决定了 对象在映射中的存储位置,检索对象时必须提供相应的关键字,就像在字典中查单词一样。关键字是唯一的。...= mutableMapOf(1 to "X", 2 to "Y", 3 to "Z") 如果创建没有元素的空List,使用listOf() 即可。...标准库中的集合类List、Set、Map,以及它们扩展的丰富的操作函数,这些函数使得我们使用这些集合类更加简单容易。

    1.3K20

    Kotlin入门(16)容器的遍历方式

    Kotlin号称全面兼容Java,于是乎Java的容器类仍可在Kotlin中正常使用,包括大家熟悉的队列ArrayList、映射HashMap等等。...既然Set/List/Map都属于容器,那么必定拥有相同的基本容器方法,具体说明如下: isEmpty : 判断该容器是否为空。 isNotEmpty : 判断该容器是否非空。...初始化赋值 : Kotlin允许在声明容器变量之时进行初始赋值,这点很方便比Java先进,当然不同容器的初始化方法有所区别,具体的对应关系见下表: 只读集合Set    setOf 可变集合    ...forEach方法在编码时采用匿名函数的形式,内部使用it代表每个元素的对象,下面是运用了forEach循环的代码例子:     btn_set_foreach.setOnClickListener {...下面是在映射中运用for-in循环的代码例子:     btn_map_for.setOnClickListener {         var desc = ""         //使用for-in

    2.4K20

    号称取代 Java 的 Kotlin 语言到底是什么鬼?

    这个想法很好,在 Kotlin 中,类型默认不可为空。如果你需要添加一个可为空的类型,可以像下列代码这样: val a: String?...= null // ok val b: String = null // compilation error 假设你使用了可为空的变量但是并未进行空值检查,这在 Kotlin 将无法通过编译...如今,Optional 是在 API 边界处理返回类型中的空值的非常流行的方式。 Kotlin 中没有 Optional 的等价物,所以你大概应该使用 Kotlin 的可空类型。...数据类 数据类是 Kotlin 在实现 Value Objects 时使用的方法,以减少 Java 中不可避免的样板问题。...在实现简单的DTO 时它非常有用。但请记住,数据类带有严重的局限性。你无法扩展数据类或者将其抽象化,所以你可能不会在核心模型中使用它们。 这个限制不是 Kotlin 的错。

    2.3K50

    用 Map 为你的属性做代理

    不瞒各位说,Preference 这个类的源码来自于《Kotlin for Android Developers》这本书,我在初学 Kotlin 的时候一下子就被这个特性惊艳到了,有这样好用的扩展,请问你还有什么理由用...最要命的是,官方提供的 SharedPreference 的 api 在使用过程中,不仅难用,而且还经常因为丢掉 commit 而导致错误。...其实有时候如果能够用一个 Map 来 backup 一个类的属性,那会意见非常酷的事情,下面我们就给大家看一个例子。 在访问 GitHub 的 list 请求时,分页问题是一个不得不考虑的问题。...MutableMap 自然是可以代理可读写的属性的,下面的扩展方法印证了这一点: public inline operator fun MutableMap....Map(注意这一点,Kotlin 的 Map 尽管在 Jvm 上编译成了 java.util.Map,但在语言层面却没有修改的方法),所以只能代理只读变量了: public inline operator

    59220

    【Kotlin】集合操作总结 ( List 集合 | MutableList 集合 | List 集合遍历 | Set 集合 | MutableSet 集合 | Map 集合 | 可变 Map集合 )

    [] 下标获取 List 集合元素外 , Kotlin 还提供了 安全获取集合元素的 方法 : getOrElse 和 getOrNull 函数 ; 1、getOrElse 函数 List.getOrElse...{ return if (index >= 0 && index <= lastIndex) get(index) else null } 参数分析 : 在该函数中 , 传入函数索引参数 ; 返回值分析...to 函数进行初始化 : 在参数中使用 键 to 值 的方式进行初始化 ; 使用 Pair 对象进行初始化 : 传入 Pair(键, 值) 进行初始化 ; to 函数原型如下 , 其本质也是返回 Pair...取值运算符 [] 获取 Map 集合中的值 , 运算符中传入 键 , 如果找不到 键 对应的 值 , 返回 null ; 使用 Map#getValue 函数 , 获取 键 对应的 值 , 如果没有找到则抛出异常...取值运算符 `[]` 获取 Map 集合中的值 , 运算符中传入 键 , 如果找不到 键 对应的 值 , 返回 null println(map["Tom"]) // 使用 Map

    6.1K20

    第8章 泛型第8章 泛型

    参数化类型,顾名思义就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式,我们称之为类型参数,然后在使用时传入具体的类型(类型实参)。...在这一点上,泛型跟我们第3章中所讲到的“可空类型”实现的空指针安全,在思想上有着异曲同工之妙。 8.2 在类、接口和函数上使用泛型 泛型类、泛型接口和泛型方法具备可重用性、类型安全和高效等优点。...在集合类API中大量地使用了泛型。在Java 中我们可以为类、接口和方法分别定义泛型参数,在Kotlin中也同样支持。本节我们分别介绍Kotlin中的泛型接口、泛型类和泛型函数。...8.2.1 泛型接口 我们举一个简单的Kotlin泛型接口的例子。...在Kotlin中,我们把那些只能保证读取数据时类型安全的对象叫做生产者,用 out T标记;把那些只能保证写入数据安全时类型安全的对象叫做消费者,用 in T标记。

    1.9K20

    【Android进阶】kotlin 委托

    委托模式是软件设计模式中的一项基本技巧。在委托模式中,有两个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象来处理。 Kotlin 直接支持委托模式,更加优雅,简洁。...Kotlin 通过关键字 by 实现委托。 类委托 类的委托即一个类中定义的方法实际是调用另一个类的对象的方法来实现的。...以下实例中派生类 Derived 继承了接口 Base 所有方法,并且委托一个传入的 Base 类的对象来执行这些方法。...provideDelegate 的一个可能的使用场景是在创建属性时(而不仅在其 getter 或 setter 中)检查属性一致性。...比较对于属性声明 val prop: Type by MyDelegate() 生成的代码与 上面(当 provideDelegate 方法不存在时)生成的代码: class C { var prop

    53920

    Kotlin热身篇: 简介与基本用法

    Kotlin 基础语法 5.1 kotlin 方法 5.1.1 kotlin 方法声明 Kotlin 定义方式比较简单,括号中是参数,格式: "函数名(参数名称: 参数): 返回类型",返回类型定义在括号外...5.1.3 kotlin 方法自动传参 Kotlin 可以在 构造方法或者相关函数大括号里面设置默认参数,这样传参就可以使用默认参数了,我们具体看看怎么使用的吧~ ?...如果需要声明一个变量可为空,仅需在变量类型后面加上? val n: String?=null 声明一个变量可为空,仅需在变量类型后面加上?...// 在使用n的时候,由于n可能为null,直接使用编译器会报错 n.length // 正确的使用方式是,在使用前,做判空处理 // 如果变量为空,只需在变量类型后面加上?...Kotlin 可以使用安全转换操作符 as?,它可以在失败时返回 null,详细代码如下: foo as?

    1.6K30

    减少崩溃,提升体验 | 使用 Kotlin 打造优质应用

    与社区交流后,我们了解到开发者采用 Kotlin 的主要原因之一是为了更安全的代码。...比如 Kotlin 的空安全性就让点评的 Android 应用团队赞不绝口,而且团队开发者还可以通过在 Java 代码中使用 @Nullable 和 @NonNull 等注解来确保 Kotlin 代码获得正确的可空性推断...为了避免 NullPointerException,您需要确保正在处理的对象引用非 null,然后再调用方法或尝试访问其成员。在 Kotlin 中,是否可为 null 是类型系统的一部分。...在使是否可为 null 成为类型系统的一部分后,您不必再依赖内存和对代码库的了解,也不必依赖编译时警告 (如果用 @Nullable 注解字段/参数)。...然而,经常会发生忘记实现其中一个方法或者在类中添加新属性时忘记更新。当处理仅用于保存数据的类时,请使用 Kotlin 数据类。

    1.4K10

    Kotlin 是如何避免空指针问题的

    在谈Kotlin的优势的时候,大家都会想到空指针安全这一点,那么Kotlin又是如何避免这些问题的呢?下面从Kotlin的一些语法规则上给出介绍。...以下面的Java判断空值方法为例: public void foo(Bar bar) { /*…*/ } 对于这样一个典型的方法,如果传入的参数为null,那么通常的处理方式是检查输入: public...void foo(Bar bar) { if (bar == null) throw IllegalArgumentException(); /*…*/ } 如果调用该方法时传入了null...NotNull Bar bar) { if (bar == null) throw IllegalArgumentException() /*…*/ } 如此一来,像IntelliJ IDEA这样的工具在检测到调用者可能传入...这样的代码没错,但就是有点啰嗦。 Kotlin采用了一种不同的null处理方式。它对可空类型和不可空类型作了区分,可空的类型后面会跟一个问号,比如Bar?,而Bar类型的变量则不可为空。

    1.6K70
    领券