接上篇: 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的函數,還有其他函數如:

具體對應了不同類型的集合的建立方式,就不一一列舉了。針對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中的集合就簡單介紹到這裡,具體的和Java中集合的對比,可以自行研究下,今天介紹的這些已經能夠滿足大部分開發需求了。
Kotlin學習記錄(五)—— 條件表達式的使用