Kotlin学习笔记(二)

二、数组和集合

1、数组

Kotlin的数组是Array类的一个实例

1.1 创建数组

大致有两种方式

  • 使用arrayOf()arrayOfNUlls()emptyArray()工具函数
  • 使用Array(size:Int,init:(Int)->T)构造器

下面代码示范了创建数组

//创建包含指定元素的数组
var arr1 = arrayOf(1, 2, 3)
//创建指定长度,元素为null的数组,必须指定泛型的值
var arr2 = arrayOfNulls(4)
//创建长度为0的空数组
var arr3 = emptyArray()
//创建指定长度,使用Lambda表达式初始化数组元素的数组
var arr4 = Array(5, { "hello" })

此外,由于Array类要求它的元素必须是引用类型,因此如果是存入的是基本类型,Kotlin将自动装箱。此外Kotlin还专门提供了ByteArray、ShortArray等类。

//创建包含指定元素的数组
var arr1 = intArrayOf(1, 2, 3)
//创建指定长度,使用Lambda表达式初始化数组元素的数组
var arr2 = IntArray(5, { it * it })

从上面的代码可以看出,对于XxxArray数组,不再支持将元素初始化为null方式来创建数组——因为基本类型的元素不允许null

1.2 使用数组

使用[]来取指定索引处的元素,对应的是get(index)方法

1.3 for-in遍历数组
var books = arrayOf("书本1", "书本2")
//for-in遍历
for (book in books) {
}

数组还提供了indices属性,返回数组的索引范围;lastIndex属性,返回最后一个元素的索引值。

1.4 控制循环结构

break和continue是用来跳出循环的关键字,当嵌套了2层循环的时候,如何跳到最外层的循环呢?这个时候就要用到标签,Kotlin的标签就是一个紧跟着@的标识符。

outer@ for (i in 0 until 5) {
    for (j in 0 until 3) {
        if (j == 1) {
            break@outer
        }
    }
}

2、集合概述

Kotlin的集合分为可变集合MutableSet(可以添加、删除、修改)和不可变集合Set(只能读取)。Kotlin只提供了HashSet、HashMap、LinkedHashSet、LinkedHashMap、ArrayLis这5个实现类,并且都是可变集合。不可变集合只能通过函数去创建。

3、Set

3.1 声明和创建Set集合

不推荐通过构造器去创建Set集合,推荐使用工具函数去创建。
如下函数可以创建Set集合:

setOf() //返回不可变Set,返回的是LinkedHashSet
mutableSetOf() //返回可变集合,返回的是LinkedHashSet
hashSetOf()  //返回可变集合,返回的是HashSet
linkedSetOf() //返回可变集合,返回的是LinkedHashSet
sortedSetOf() //返回可变集合,返回的是TreeSet,集合元素从小到大排列
3.2 遍历Set

可以使用for-in或者Set#forEach方法

3.3 增删改查
add(el:E)
addAll(els:Collection)
remove(el:E)
removeAll(els:Collection)
retainAll(els:Collection) //交集

Set和MutableSet都包含一个iterator()方法,但普通的Set返回的Iterator对象只有hasNext()和next()方法;而MutableSet的iterator()方法返回的Iterator对象还提供了一个remove()方法,用于迭代时删除元素

4、List

4.1 声明和创建List

同set,推荐使用工具函数来创建List

listOf() //返回不可变List
listOfNotNull() //返回不可变List,自动去除传入的null
mutableListOf() //返回可变List
arrayList() //返回可变的ArrayList
4.2 相关方法
get() //可以使用[]访问
indexOf()
lastIndexOf()
subList()

5、Map

5.1 声明和创建Map
mapOf() //返回不可变Map
mutableMapOf() //返回可变的Map
hashMapOf() //返回可变的HashMap
linkedMapOf() //返回可变LinkedHashMap
sortedMapOf() //返回可变TreeMap,按照key大小进行排序
5.2 遍历Map
var map = mapOf("a","b","c")
for(en in map.keys){
}

for(en in map.entries){
}

for((key,value) in map){
}

map.forEach({println(it.key+":"+it.value)})

你可能感兴趣的:(Kotlin学习笔记(二))