美文网首页
Kotlin基础(集合)

Kotlin基础(集合)

作者: zhujunhua | 来源:发表于2018-05-02 11:28 被阅读0次

适合有java基础的,获取kotlin基础知识/语法等,Kotlin精讲-黑马程序员(原创)的学习笔记。

1. 区间

在Kotlin里面,区间表示相关的类有IntRange、LongRange、CharRange,这三个类都实现了ClosedRange接口。

// 区间的4种表示方法
fun testRange() {
    // [1, 10], IntRange包含start,end(参数名:endInclusive)
    var r1 = IntRange(1, 10)
    // [1, 10], 同IntRange()
    var r2 = 1.rangeTo(10)
    // [1, 10], 包括start,end
    var r3 = 1..10
    // [1, 10), 包括start,不包括end
    var r4 = 1 until 10
}

区间遍历

fun testRange() {
    // [1, 10]
    var intRange = IntRange(1, 10)

    // 1. 普通for循环
    for (i in intRange) {
        print("$i, ")
    }
    println()

    // 2. step的for循环
    for (i in intRange step 1) {
        print("$i, ")
    }
    println()

    // 3. forEach
    intRange.forEach {
        print("$it, ")
    }
    println()

    // 4. forEach index
    intRange.forEachIndexed {
        index, i -> print("$index -> $i, ")
    }
    println()

    // 5. withIndex_1
    for (i in intRange.withIndex()) {
        print("${i.index} -> ${i.value}, ")
    }
    println()

    // 6. withIndex_2
    for ((index, value) in intRange.withIndex()) {
        print("$index -> $value, ")
    }
    println()
}

Kotlin为区间设有first、start和last等属性,也有contains等方法,以及其他大量的高阶函数可以使用。

2. 数组

在Kotlin中,数组的完整定义如下
public class Array<T> {}

// 数组定义
fun testArray() {
    // 1. arrayOf
    var array = arrayOf(1, 2, 3, 4)
    println("array size is ${array.size}")
    // 2. Array构造方法, 输出0,2,4,6
    var array2 = Array(4) {
        it * 2
    }
}
// 数组遍历 (也可以使用高阶函数进行遍历)
fun testArray() {
    var array = arrayOf(1, 2, 3, 4)

    // 1. 普通for
    for (i in array) {
        print("$i, ")
    }
    println()

    // 2. for循环 indices
    for (index in array.indices) {
        print("$index -> ${array[index]}, ")
    }
    println()

    // 3. for循环 withIndex
    for (i in array.withIndex()) {
        print("${i.index} -> ${i.value}, ")
    }
    println()

    // 4. for循环 解析析构
    for ((index, value) in array.withIndex()) {
        print("$index -> $value, ")
    }
    println()
}
// 数组长度调整(生成新的数组,原数组长度不可变)
fun testArray() {
    var array: Array<Int> = arrayOf(1, 2, 3, 4)
    // 新增
    var plusArray: Array<Int> = array.plus(5)
    // 删除
    var dropArray1: List<Int> = array.drop(2)
    var dropArray2: List<Int> = array.dropLast(2)
    // 提取部分
    var sliceArray: Array<Int> = array.sliceArray(0..2)
}

3. 集合

同Java,集合分为三种类型,分别是List、Set和Map集合。
Kotlin中List、Set、Map的集合在读方面都是可读的,在写方面则分为可写/不可写集合。

Java中List、Set集合都实现了Collection接口,Java中的Collection接口就已经包含了add方法,所以Java中所有List、Map集合都是可写的;
Kotlin中List、Set集合都实现了Collection接口,但是Collection接口没有add方法,Kotlin为Collection新增一个子接口MutableCollection,add方法定义到了MutableCollection中,只要实现了MutableCollection的List、Set集合都是可写的;
Kotlin为Map接口新增一个子接口MutableMap,put方法定义到了MutableMap接口中。

总结起来就是,使用MutableList、MutableSet、MutableMap创建的集合都是可写的, Mutable的意思本来也是“易变的,性情不定的”。

3.1 List

list的创建包括4种方法:

// 是否可写,看方法的返回值,List不可写
fun testList() {
    // 返回List,不可写
    var list1 : List<Int> = List<Int>(4) {
        it
    }
    // 返回List,不可写
    var list2 : List<Int> = listOf<Int>(1, 2, 3, 4)
    // 返回ArrayList,可写
    var list3 : ArrayList<Int> = arrayListOf<Int>(1, 2, 3, 4)
    // 返回MutableList,可写
    var list4 : MutableList<Int> = mutableListOf<Int>(1, 2, 3, 4)
}
// 不可写集合可以通过totoMutableList转换为可写集合,然后再进行写操作
fun testList() {
    // 不可写
    var list : List<Int> = listOf<Int>(1, 2, 3, 4)
    // toMutableList之后,生成的新的List,原List没有变化!
    var toMutableList = list.toMutableList()
    toMutableList.add(5)
}

List的数据变换,可以通过slice、subList、drop、dropLast对集合进行变换,产生一个新的集合。

// slice()方法,对集合进行截取,产生一个新的集合,接收一个区间类型的参数。
fun testList() {
    var list : List<Int> = listOf<Int>(1, 2, 3, 4)
    // [0, 2] => 1,2,3
    var list1 = list.slice(0..2)
    // [0, 2) => 1,2
    var list2 = list.slice(0 until 2)
}
3.2 Set

Set接口常用的实现类有哪些?HashSet、TreeSet和MutableSet。

3.3 Map

Map接口常用的实现类有哪些? HashMap、LinkedHashMap、TreeMap和MutableHashMap。

HashMap,基于Map接口哈希表实现,通过哈希表对其内部的映射关系快速查找,存取效率高,迭代无序。
LinkedHashMap,基于Map接口哈希表实现和链接列表实现,链接列表定义了迭代顺序,该迭代顺序可以是插入顺序或者是访问顺序。
TreeMap ,基于红黑树实现的,迭代根据其键的自然顺序进行排序,或者可以自行指定比较器。

// map的定义
fun testMap() {
    var map1 = mapOf<String, Int>(
            Pair("Jerry", 4),
            Pair("Tom", 12)
    )
    var map2 = mapOf<String, Int>(
            "Jerry" to 4,
            "Tom" to 12
    )
}
// Map变化
fun testMap() {
    var map1 = mapOf<String, Int>(
            "Jerry" to 4,
            "Tom" to 12
    )
    // 产生新的map,对原map无影响
    var plus = map1.plus("Jack" to 5)
    // 产生新的map,对原map无影响
    var minus = map1.minus("Tom")
}

4. 集合间的转化

Range, Array, List, Set, Map 互相之间,可以通过 arrayOf, toSet, toList等方法进行转换。

参考:
Kotlin精讲-黑马程序员(原创)

相关文章

  • Kotlin 进阶之路 目录

    Kotlin 进阶之路 目录 Kotlin 进阶之路1 基础语法Kotlin 进阶之路2 集合类型Kotlin 进...

  • Kotlin基础(集合)

    适合有java基础的,获取kotlin基础知识/语法等,Kotlin精讲-黑马程序员(原创)的学习笔记。 1. 区...

  • Kotlin第三章小结

    Kotlin没有定义自己的集合类,而是在Java集合类的基础上提供了更丰富的api Kotlin可以给函数参数定义...

  • 函数的定义和调用

    3.1 创建集合 kotlin没有采用自己的集合类,而是采用的标准的java集合类。在java集合类的基础上新增了...

  • Kotlin基础--集合基础总结

    在Android日常开发中,数组和集合这两个数据容器是必不可少的。在Kotlin中集合同样是有三大类:List、S...

  • Kotlin学习之可变与不可变集合

    Kotlin学习之可变与不可变集合 一、可变集合与不可变集合有哪些? Kotlin集合框架在kotlin.coll...

  • Kotlin基础(7)-集合

    前言 本文主要介绍kotlin中有关集合的相关知识,本文篇幅较长,可以只看自己关系的部分即可。可作为方法说明使用。...

  • kotlin集合--基础篇

    https://blog.csdn.net/weixin_38478780/article/details/108...

  • Kotlin常用Collection集合操作整理

    本篇记录了Kotlin常用集合的相关操作,用以熟练使用Kotlin里的相关集合。集合接口与相关函数位于kotlin...

  • Android Kotlin(3)之《基本类型与集合》

    Android Kotlin第三篇,这篇我们一起来了解下Kotlin基础类型与集合,也许我有的地方没有写好,也欢迎...

网友评论

      本文标题:Kotlin基础(集合)

      本文链接:https://www.haomeiwen.com/subject/krnqrftx.html