Kotlin实战指南一:集合
轉載請標明出處:https://blog.csdn.net/zhaoyanjun6/article/details/87781732
本文出自【趙彥軍的博客】
Kotlin初體驗一:集合
- 集合
- 一、listOf()函數
- 二、mutableListOf()函數
- 三、arrayListOf()函數
- 四、listOfNotNull()函數
- 五、binarySearch()函數
集合
List是有順序的數據結構,在Kotlin中提供了類似數組的訪問方式:
創建集合
//創建一個空的list集合,相當于 new ArrayList() var list = mutableListOf<String>()//創建一個有初始值的list集合,相當于 CollectionsKt.mutableListOf(new String[]{"a", "b", "c"}) var list = mutableListOf("a","b","c")//獲取值 //方式一:獲取第1個數據,相當于 list.get(0) var data = list[0]//方式二: var data = list.get(0)//添加值 list.add("d") list.add(1,"e")其他的集合操作也類似
//創建一個空的map集合,相當于 new LinkedHashMap() var map = mutableMapOf<String,String>()//創建一個空的set集合,相當于 new LinkedHashSet() var set = mutableSetOf<String>()一、listOf()函數
Collection.kt定義了三個參數不同的listOf()函數,可以方便地創建一個不可變的List:
fun <T> listOf(): List<T> fun <T> listOf(T): List<T> fun <T> listOf(vararg T): List<T>- 第一個無參的listOf()函數返回空的List,它直接調用同一文件內定義的emptyList()函數,該函數返回一個單例對象EmptyList。EmptyList是List接口的實現類,可以代表所有類型的空列表。
- 第二個listOf()函數產生一個只有一個元素的不可變列表,它直接調用java.util.Collections類的singletonList()方法。
- 第三個lisOf(),接受可變數量的T類型元素并生成包含這些元素的列表。傳入一個T類型的數組,如果長度為0就返回空列表,否則 就將數組轉換為列表。
二、mutableListOf()函數
listOf()函數可以創建不變的List,要想創建可變的List,可以使用mutableList()函數:
inline fun mutableListOf(): MutableList = ArrayList()
inline關鍵字定義了內聯函數,會在編譯時展開到調用處,提高性能。
Kotlin的集合框架只定義了接口,具體實現類都是直接調用Java類。mutableListOf()返回一個ArrayList對象。
三、arrayListOf()函數
arrayListOf()函數用來創建可變的ArrayList,有兩個參數不同的重載形式:
inline fun arrayListOf(): ArrayList = ArrayList()
這個函數的實現與mutableListOf()完全一樣,唯一的不同在于返回的類型不同。arrayListOf()返回ArrayList,是一個Java的ArrayList類型,所以是可變的。
四、listOfNotNull()函數
以上的函數都是可以接受null作為元素的,這與Java中的List是不同的。而這個方法會把null全部剔除掉,返回包含所有非null值的List:
fun listOfNotNull(element: T?): List<T> = if(element != null) listOf(element) else emptyList()fun listOfNotNull(vararg elements: T?): List<T>= elements.filterNotNull()這兩個函數都接受可空的T?類型參數,返回剔除所有null值的List。
第二個函數調用的Array<out T?>.filterNotNull()函數,會先新建一個ArrayList,然后遍歷數組內的所有元素,如果不是null就添加到ArrayList里,最后返回ArrayList。
例子
var list = mutableListOf("a", "b", null) Log.e("zhao","list:" + list) //輸出結果:[a, b, null]var list2 = listOfNotNull("a", "b", null) Log.e("zhao","list no null :" + list2) //輸出結果:[a, b]五、binarySearch()函數
Collections.kt文件中提供了四個針對List的binarySearch()函數,它們可以對列表進行二分查找:
fun <T> List<T>.binarySearch(element: T, comparator: Comparator<in T>, fromIndex: Int = 0, toIndex: Int = size): Int fun <T> List<T>.binarySearch(fromIndex: Int = 0, toIndex: Int = size, comparison: (T) -> Int): Int fun <T: Comparable<T>> List<T?>.binarySearch(element: T?, fromIndex: Int = 0, toIndex: Int = size): Intinline fun <T, K : Comparable<K>> List<T>.binarySearchBy(key: K?, fromIndex: Int = 0, toIndex: Int = size, crossinline selector: (T) -> K?): Int = binarySearch(fromIndex, toIndex) { compareValues(selector(it), key) }- 函數需要提供一個Comparator比較器,與java.util.Arrays.binarySearch()相同;
- 函數需要提供一個(T)->Int類型的函數,用來比較列表內的元素,可以視為傳入一個compareTo()函數。
- 函數提供了可空元素的二分查找。
- 函數需要提供一個(T)-K?類型的函數和一個K?類型的值,它會在列表中用二分查找法尋找符合這個值的元素的索引。
Kotlin提供的幾個binarySearch()函數用法與Java大同小異。
返回結果是Int:
- 0:查找成功
- -1:查找失敗
小例子:
//創建一個list var list = mutableListOf("a", "b")//方式一:從所有的元素中查找a元素,默認開始位置0,結束位置 size var result = list.binarySearch("a")///方式二:從指定的元素中查找a元素,默認開始位置0,結束位置 size var result = list.binarySearch("a",0,list.size)個人微信號:zhaoyanjun125 , 歡迎關注
總結
以上是生活随笔為你收集整理的Kotlin实战指南一:集合的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 江湖已去,作品长存
- 下一篇: Kotlin实战指南二:变量、常量、静态