天天看點

Kotlin學習記錄(四)—— 常用集合的使用

接上篇: Kotlin學習記錄(三)—— 子線程擷取資料,實作簡單ListView

集合在程式中的比例的很重的,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的函數,還有其他函數如:

Kotlin學習記錄(四)—— 常用集合的使用

具體對應了不同類型的集合的建立方式,就不一一列舉了。針對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 "泰達米爾"
)      

map和hashMap的差別,這裡就不說了,Java的基礎,實在不知道的自行度娘咯。

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和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集合中的元素是不會有重複的,并且是亂序的。建立set需要使用setOf(),mutableSetOf():

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

set的隻讀和修改方法和list及map都是一樣的,大家可參考上面的内容,自行進行實驗。(就讓我偷個小懶吧

Kotlin學習記錄(四)—— 常用集合的使用

Kotlin中的集合就簡單介紹到這裡,具體的和Java中集合的對比,可以自行研究下,今天介紹的這些已經能夠滿足大部分開發需求了。

Kotlin學習記錄(五)—— 條件表達式的使用