• 《疯狂Kotlin讲义》读书笔记5——数组和集合


    数组和集合

    Kotlin为数组增加了一个Array类,为元素是基本类型的数组增加了XxxArray类(其中Xxx可以是Byte、Short、Int等基本类型),因此开发者可以用面向对象的语法来使用Kotlin的数组,包括创建数组对象、调用数组对象的属性和方法等。

    Kotlin的集合体系抛弃了Java中的Queue集合,但增加了可变集合不可变集合的概念。Kotlin的集合体系由三种集合组成:List、Set、Map

    上述三种集合性质与Java类似。

    5.1 数组

    Kotlin的数组使用Array类代表,即Kotlin的数组就是一个Array类的实例,因此Kotlin数组也算引用类型。

    5.1.1 数组的创建

    Kotlin创建数组即创建Array类的实例,大致有如下两种方式:

    • 通过Array类的构造器来创建实例:Array(size: Int, init: (Int) -> T) 构造器
    • 通过工具函数创建实例:arrayOf()、arrayOfNulls()、emptyArray()
       var arr1 = arrayOf("Java", "Kotlin", "C", "C++")  //创建包含指定元素的数组
    
        var arr2 = arrayOfNulls<Int>(5)  //创建指定长度、指定类型、元素为null的数组
    
        var arr3 = emptyArray<Double>()  //创建长度为0的空数组
    
        var arr4 = Array(5, {(it*2 + 97).toChar()})  //使用Array<T>类的构造器来创建数组,并用Lambda表达式初始化数组元素
        
    

    Array类要求它的元素必须是引用类型(基本类型的值放入会自动装箱)。

    Kotlin提供了ByteArray、ShortArray、IntArray、LongArray......用于映射Java的byte[]、short[]、int[]、long[]......

    var intArr = intArrayOf(2, 5, 7, 8)
    var stringArr = stringArrayOf("kotlin", "java")
    

    5.1.2 使用数组

    数组的使用一般就是对数组元素的访问。访问数组元素通常是通过"数组引用+[]"实现的,而Kotlin中'[]'实际是get和set方法实现的。所以在Kotliin中既可以用'[]'符号访问数组元素,也可用get / set 方法访问数组元素。

    var strArr = arrayOf("Kotlin", "Java")
    println(strArr[0])
    println(strArr.get(1))
    strArr[0] = "null"
    strArr.set(1, "null")
    
    println(str.size)  //输出数组长度
    

    5.1.3 使用 for-in 循环遍历数组

    Kotlin的 for-in 循环可以自动遍历数组中的每个元素,但是使用for-in循环遍历数组时不允许对循环变量进行赋值!(之前已经提到过,循环变量是val型)

    var languages = arrayOf("Java", "Kotlin", "C", "C++", "C#")
    for(language in languages) {
        println(language)
    }
    

    5.1.4 使用数组索引

    Kotlin的数组提供了一个indices属性,该属性可返回数组的索引区间。

    var languages = arrayOf("Java", "Kotlin", "C", "C++", "C#")
    for(i in languages.indices) {   //等效于 i in 0 until languages.size
        println(languages[i])
    }
    //通过索引区间遍历的实现具有更好的性能
    
    val last = languages.lastIndex  //Kotlin提供了lastIndex属性,返回数组最后一个元素的索引值
    
    //通过 withIndex() 可以同时访问数组的索引和元素
    for((index, value) in languages.withindex()) {
        println("索引为${index}的元素是${value}")
    }
    

    5.1.5 数组常用的方法

    • asList():将数组转换成List集合
    • distinct():去掉数组中的重复元素
    • drop | dropLast(n: Int):去掉数组前面或后面n个元素
    • indexOf | lastIndexOf(element: T):获取从前搜索或从后搜索时元素element在数组中的位置
    • max | min():按照自然序排序规则找出数组中最大或最小的元素
    • ......

    5.1.6 多维数组

    将一维数组中的元素定义为数组即使多维数组。

    var a = arrayOfNulls<Array<Int>>(4)
    a[0] = arrayOf(2, 5)
    a[0]?.set(0, 9)
    

    5.2 Kotlin集合概述

    Kotlin中的集合类同样由Collection和Map这两个接口派生。

    Kotlin只提供了HashSet、HashMap、LinkedHashSet、LinkedHashMap、ArrayList 这5个集合实现类,且都是可变集合。

    我们只能通过函数来创建不可变集合。

    5.3 Set集合

    Kotlin中的Set集合与Java基本相同。

    5.3.1 创建Set集合

    不推荐使用构造器创建Set集合,推荐使用函数来创建Set集合:

    • setOf():返回不可变的Set集合。该函数可接受0个或多个参数,这些参数将作为集合的元素。
    • mutableSetOf():返回可变的MutableSet集合。该函数可接受0个或多个参数,这些参数将作为集合的元素。
    • hashSetOf():返回可变的HashSet集合。该函数可接受0个或多个参数,这些参数将作为集合的元素。
    • linkedSetOf():返回可变的LinkedHashSet集合。该函数可接受0个或多个参数,这些参数将作为集合的元素。
    • sortedSetOf():返回可变的TreeSet集合。该函数可接受0个或多个参数,这些参数将作为集合的元素。
    var set = setOf("Java", "Kotlin")
    var mutableSet = mutableSetOf("Java", "Kotlin")
    

    使用setOf()、mutableSetOf()、linkedSetOf()创建的集合能维护元素的添加顺序,sortedSetOf()创建的集合维护元素的大小顺序。

    5.3.2 使用Set的方法

    除Java中Set集合所提供的方法外,Kotlin还扩展了一些方法,在此不做赘述。

    5.4 List集合

    Kotlin中的 List 集合与Java基本相同。

    5.4.1 声明和创建 List 集合

    同Set,不推荐用构造器来创建List 集合,推荐使用工具函数创建List 集合。(Kotlin并未真正实现List 集合,而是通过别名借用了Java中的ArraylList集合)。

    • listOf():返回不可变的List 集合,可接受0个或多个参数并作为集合元素。
    • listOfNotNull():返回不可变的List 集合,会自动去掉传入参数中的null值,即返回一个不含null的List 集合
    • mutableListOf():返回可变的MutableList集合,可接受0个或多个参数并作为集合元素。
    • arrayListOf():返回可变的ArrayList集合。可接受0个或多个参数并作为集合元素。

    5.4.2 使用List的方法

    • get()
    • indexOf():返回元素在集合中的索引。
    • lastIndexOf:返回List集合的子集合。
    • subList():返回List集合的子集合。
    • ......

    5.4.3 可变List

    使用函数mutableListOf()、arrayListOf()创建的List是可变的,可以对其执行添加、插入、删除、替换等操作。

    5.5 Map集合

    Kotlin中的 Map 集合与Java基本相同。

    5.5.1 声明和创建Map集合

    同Set和List ,推荐使用工具函数创建Map集合。

    • mapOf():返回不可变的Map集合,可接受0个或多个key-value对并将其作为集合元素。
    • mutableMapOf():返回可变的MutableMap集合,可接受0个或多个key-value对并将其作为集合元素。
    • hashMapOf():返回可变的HashMap集合,可接受0个或多个key-value对并将其作为集合元素。
    • linkedMapOf():返回可变的LinkedHashMap集合,可接受0个或多个key-value对并将其作为集合元素。
    • sortedMapOf():返回可变的TreeMap集合,可接受0个或多个key-value对并将其作为集合元素。

    5.5.2 使用Map的方法

    5.5.3 遍历Map

    • 通过"[]"运算符根据key来获取value从而实现遍历
    • for-in 循环
  • 相关阅读:
    Regular进阶: 几点性能优化的建议
    总结常见的违背Rest原则的接口设计做法
    如何进行用户访谈更容易获得全面而有效的信息
    关于以太坊智能合约在项目实战过程中的设计及经验总结(2)
    关于以太坊智能合约在项目实战过程中的设计及经验总结(1)
    字节码执行方式--解释执行和JIT
    Redis数据库结构与读写原理
    移动端工程架构与后端工程架构的思想摩擦之旅(2)
    类文件结构与javap的使用
    JVM垃圾收集器(1)
  • 原文地址:https://www.cnblogs.com/Seraph1999/p/14699427.html
Copyright © 2020-2023  润新知