日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Kotlin实战指南一:集合

發(fā)布時(shí)間:2024/9/30 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Kotlin实战指南一:集合 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

轉(zhuǎn)載請(qǐng)標(biāo)明出處:https://blog.csdn.net/zhaoyanjun6/article/details/87781732
本文出自【趙彥軍的博客】


Kotlin初體驗(yàn)一:集合

    • 集合
    • 一、listOf()函數(shù)
    • 二、mutableListOf()函數(shù)
    • 三、arrayListOf()函數(shù)
    • 四、listOfNotNull()函數(shù)
    • 五、binarySearch()函數(shù)

集合

List是有順序的數(shù)據(jù)結(jié)構(gòu),在Kotlin中提供了類似數(shù)組的訪問(wèn)方式:

創(chuàng)建集合

//創(chuàng)建一個(gè)空的list集合,相當(dāng)于 new ArrayList() var list = mutableListOf<String>()//創(chuàng)建一個(gè)有初始值的list集合,相當(dāng)于 CollectionsKt.mutableListOf(new String[]{"a", "b", "c"}) var list = mutableListOf("a","b","c")//獲取值 //方式一:獲取第1個(gè)數(shù)據(jù),相當(dāng)于 list.get(0) var data = list[0]//方式二: var data = list.get(0)//添加值 list.add("d") list.add(1,"e")

其他的集合操作也類似

//創(chuàng)建一個(gè)空的map集合,相當(dāng)于 new LinkedHashMap() var map = mutableMapOf<String,String>()//創(chuàng)建一個(gè)空的set集合,相當(dāng)于 new LinkedHashSet() var set = mutableSetOf<String>()

一、listOf()函數(shù)

Collection.kt定義了三個(gè)參數(shù)不同的listOf()函數(shù),可以方便地創(chuàng)建一個(gè)不可變的List:

fun <T> listOf(): List<T> fun <T> listOf(T): List<T> fun <T> listOf(vararg T): List<T>
  • 第一個(gè)無(wú)參的listOf()函數(shù)返回空的List,它直接調(diào)用同一文件內(nèi)定義的emptyList()函數(shù),該函數(shù)返回一個(gè)單例對(duì)象EmptyList。EmptyList是List接口的實(shí)現(xiàn)類,可以代表所有類型的空列表。
  • 第二個(gè)listOf()函數(shù)產(chǎn)生一個(gè)只有一個(gè)元素的不可變列表,它直接調(diào)用java.util.Collections類的singletonList()方法。
  • 第三個(gè)lisOf(),接受可變數(shù)量的T類型元素并生成包含這些元素的列表。傳入一個(gè)T類型的數(shù)組,如果長(zhǎng)度為0就返回空列表,否則 就將數(shù)組轉(zhuǎn)換為列表。

二、mutableListOf()函數(shù)

listOf()函數(shù)可以創(chuàng)建不變的List,要想創(chuàng)建可變的List,可以使用mutableList()函數(shù):
inline fun mutableListOf(): MutableList = ArrayList()

fun mutableListOf(vararg elements: T): MutableList<T> {if(elements.size == 0) {return ArrayList()} else {return ArrayList(ArrayAsCollection(elements, isVarargs = true))} }

inline關(guān)鍵字定義了內(nèi)聯(lián)函數(shù),會(huì)在編譯時(shí)展開到調(diào)用處,提高性能。
Kotlin的集合框架只定義了接口,具體實(shí)現(xiàn)類都是直接調(diào)用Java類。mutableListOf()返回一個(gè)ArrayList對(duì)象。

三、arrayListOf()函數(shù)

arrayListOf()函數(shù)用來(lái)創(chuàng)建可變的ArrayList,有兩個(gè)參數(shù)不同的重載形式:
inline fun arrayListOf(): ArrayList = ArrayList()

fun <T> arrayListOf(vararg elements: T): ArrayList<T> {if(elements.size == 0) {return ArrayList()} else {return ArrayList(ArrayAsCollection(elements, isVarargs = true))} }

這個(gè)函數(shù)的實(shí)現(xiàn)與mutableListOf()完全一樣,唯一的不同在于返回的類型不同。arrayListOf()返回ArrayList,是一個(gè)Java的ArrayList類型,所以是可變的。

四、listOfNotNull()函數(shù)

以上的函數(shù)都是可以接受null作為元素的,這與Java中的List是不同的。而這個(gè)方法會(huì)把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()

這兩個(gè)函數(shù)都接受可空的T?類型參數(shù),返回剔除所有null值的List。
第二個(gè)函數(shù)調(diào)用的Array<out T?>.filterNotNull()函數(shù),會(huì)先新建一個(gè)ArrayList,然后遍歷數(shù)組內(nèi)的所有元素,如果不是null就添加到ArrayList里,最后返回ArrayList。

例子

var list = mutableListOf("a", "b", null) Log.e("zhao","list:" + list) //輸出結(jié)果:[a, b, null]var list2 = listOfNotNull("a", "b", null) Log.e("zhao","list no null :" + list2) //輸出結(jié)果:[a, b]

五、binarySearch()函數(shù)

Collections.kt文件中提供了四個(gè)針對(duì)List的binarySearch()函數(shù),它們可以對(duì)列表進(jìn)行二分查找:

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) }
  • 函數(shù)需要提供一個(gè)Comparator比較器,與java.util.Arrays.binarySearch()相同;
  • 函數(shù)需要提供一個(gè)(T)->Int類型的函數(shù),用來(lái)比較列表內(nèi)的元素,可以視為傳入一個(gè)compareTo()函數(shù)。
  • 函數(shù)提供了可空元素的二分查找。
  • 函數(shù)需要提供一個(gè)(T)-K?類型的函數(shù)和一個(gè)K?類型的值,它會(huì)在列表中用二分查找法尋找符合這個(gè)值的元素的索引。

Kotlin提供的幾個(gè)binarySearch()函數(shù)用法與Java大同小異。

返回結(jié)果是Int:

  • 0:查找成功
  • -1:查找失敗

小例子:

//創(chuàng)建一個(gè)list var list = mutableListOf("a", "b")//方式一:從所有的元素中查找a元素,默認(rèn)開始位置0,結(jié)束位置 size var result = list.binarySearch("a")///方式二:從指定的元素中查找a元素,默認(rèn)開始位置0,結(jié)束位置 size var result = list.binarySearch("a",0,list.size)

個(gè)人微信號(hào):zhaoyanjun125 , 歡迎關(guān)注

與50位技術(shù)專家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的Kotlin实战指南一:集合的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。