Kotlin基础(集合)

适合有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精讲-黑马程序员(原创)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,451评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,172评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,782评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,709评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,733评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,578评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,320评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,241评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,686评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,878评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,992评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,715评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,336评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,912评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,040评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,173评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,947评论 2 355

推荐阅读更多精彩内容