集合在程序中的比例的很重的,Kotlin针对集合进行了更加简洁和有效的封装,这边文章就简单的介绍一下list,map,set这三个最常用集合的使用。

首先在Kotlin中,明确区分了集合的只读和可变。

Iterable接口声明了Kotlin中集合的通用方法,是最基本的接口。

MutableIterable接口继承Iterable,继承该接口的可以被迭代,可以再迭代期间移除元素。

Collection接口继承了Iterable,是集合通用的接口,但是只封装了只读的方法。

MutableCollection<E>接口继承了Iterable和Collection,封装了添加和移出的方法。

只是这样说还是云里雾里分不清,我们往下看,具体到代码:

list:

List是以线性方式管理物件集合,其可以很快的在任何地方进行增加和删除元素。List<E>接口继承Collection<E>接口,集合中可以存放重复对象。我们以代码的形式对其新建和函数进行使用说明:

val list= listOf<String>(      //新建list
        "瓦洛兰",
        "德玛西亚",
        "班德尔城",
        "诺克萨斯",
        "祖安",
        "皮尔特沃夫",
        "艾欧尼亚",
        "李青",
        "阿利斯塔",
        "希维尔",
        "潘森",
        "伊泽瑞尔",
        "雷克顿",
        "古拉加斯",
        "奥利安娜",
        "崔斯塔娜",
        "泰达米尔",
        "马尔扎哈",
        "卡西奥佩娅",
        "艾尼维亚"
)

listOf()是Kotlin提供的创建list的函数,还有其他函数如:

android kotlin thread 子线程_指定位置

具体对应了不同类型的集合的创建方式,就不一一列举了。针对list本身的一些操作函数如:

val count=list.size     //集合中元素的数量  Int
val isNull=list.isEmpty()   //判断集合是否为空  Boolean
val isContains=list.contains("李青")  //判断集合中是否包含某种元素     Boolean
val list2= listOf<String>(
        "瓦洛兰",
        "德玛西亚",
        "班德尔城",
        "诺克萨斯",
        "祖安"
)
val isContainsAll=list.containsAll(list2)   //判断集合中是否包含另一个集合    Boolean
val indexStr=list.get(2)    //查询集合中某个位置的元素值 <E>
val index=list.indexOf("李青")    //返回集合中某个元素首次出现的索引,如果不存在则返回-1 Int
val lastIndex=list.lastIndexOf("李青")    //返回集合中某个元素最后出现的索引,如果不存在则返回-1   Int

val iterator=list.iterator()    //返回该只读集合的元素迭代器     Iterator
val listIterator=list.listIterator()    //返回一个集合的迭代器    ListIterator
val listIteratorIndex=list.listIterator(2)  //从指定位置开始,返回一个集合的迭代器    ListIterator
val subList=list.subList(1,9)   //返回集合中从1到9之间的集合    List

大家应该注意到,这些函数和方法都是只读的操作,并没有对list进行修改。list在Kotlin中也就是一个只读的集合,如果想对其进行修改,我们应该使用MutableList(这些只读的方法和函数是通用的),具体如下:

val mutableList= mutableListOf<String>(
        "伊泽瑞尔",
        "雷克顿",
        "古拉加斯",
        "奥利安娜",
        "崔斯塔娜",
        "泰达米尔",
        "马尔扎哈",
        "卡西奥佩娅",
        "艾尼维亚"
)
val isAddOk=mutableList.add("祖安")     //添加一个元素,返回true或false   Boolean
val isAddIndexOk=mutableList.add(2,"班德尔城")  //在指定位置添加一个元素   Unit
val isRemoveOk=mutableList.remove("李青")    //移除集合中的一个元素,返回true或false    Boolean
val isRemoveAtOk=mutableList.removeAt(3)    //移除指定为位置的元素    <E>
val isAddAllOk=mutableList.addAll(list2)   //添加另一个集合,返回true或false       Boolean
val isRemoveAllOk=mutableList.removeAll(list2)  //移除一个集合,返回true或false   Boolean
val isSetOk=mutableList.set(2,"诺克萨斯")   //替换指定位置的元素,返回原元素   <E>
val isClearOk=mutableList.clear()   //清空集合中得元素 Unit
val list4=mutableList.toList()  //tolist是一个扩展函数,可以赋值list内的内容,返回一个只读的list

Map:

Map是一个存放键和值的集合,每一个元素都包含键和值。Kotlin中Map和list一样,也分为只读和可变两种Map。

创建Map时需要调用mapOf(),mutableMapOf():

val map= mapOf<Int,String>(
        1 to "伊泽瑞尔", 2 to "雷克顿", 3 to "古拉加斯", 4 to "泰达米尔"
)
val hashMap= hashMapOf<Int,String>(
        1 to "伊泽瑞尔", 2 to "雷克顿", 3 to "古拉加斯", 4 to "泰达米尔"
)
val count=map.size  //获取元素数量
val keys=map.keys   //返回map中key的集合
keys.forEach(::print)   //输出Log:1,2,3,4
val values=map.values    //返回map中key的集合
values.forEach(::print)     //输出Log:伊泽瑞尔,雷克顿,古拉加斯,泰达米尔
val entry=map.entries   //返回键/值对集合
entry.forEach{
    println("key: ${it.key} , value: ${it.value}")
}       //输出key:1 , value:伊泽瑞尔  key:2...

val isEmpty=map.isEmpty()   //判断集合是否为空 Boolean
val isContainsKey=map.containsKey(3)    //判断集合中是否包含某个key
val isContainsValue=map.containsValue("雷克顿")    //判断集合中是否包含某个value
val valueStr=map.get(2) //获取指定key的元素值,没有则返回null

 

map和hashMap的区别,这里就不说了,Java的基础,实在不知道的自行度娘咯。

上面说了map和list一样是只读的,可变的map需要使用mutableMap:

var mutableMapOf= mutableMapOf<Int,String>()
mutableMapOf.putAll(map)    //添加整个map
mutableMapOf.put(5,"拉克丝")   //添加指定key的value
mutableMapOf.remove(2)  //移除元素
mutableMapOf.clear()    //清空集合

很多情况下,函数和方法的名字和list的都是一样的。

set集合中的元素是不会有重复的,并且是乱序的。创建set需要使用setOf(),mutableSetOf():

val set= setOf<String>(
        "祖安",
        "皮尔特沃夫"
)
val mutableSet= mutableSetOf<String>(
        "阿利斯塔",
        "希维尔"
)

 

set的只读和修改方法和list及map都是一样的,大家可参考上面的内容,自行进行实验。Kotlin中的集合就简单介绍到这里,具体的和Java中集合的对比,可以自行研究下,今天介绍的这些已经能够满足大部分开发需求了。