最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Kotlin數(shù)據(jù)容器深入講解

 更新時間:2022年09月13日 17:04:00   作者:Ken'  
Kotlin的數(shù)據(jù)容器分為數(shù)組和集合。其中集合分為集合Set、隊列List、映射Map等三種集合,每種又包括只讀和可變兩種類型,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧

前言

容器是用于存放數(shù)據(jù)的載體。容器分為數(shù)組、集合。 Kotlin 作為一門全新的語言,肯定還是要有自己的容器類,不然哪天 Java 跟 Kotlin 劃清界限,那麻煩就大了。 Kotlin 也擁有三類基本的容器,分別是集合 Set、隊列 List、映射 Map,每種 容器又分作只讀與可變兩種類型這是為了判斷該容器能否進(jìn)行增刪改等變更操作。

• Kotlin 數(shù)組

• Kotlin 集合

一、Kotlin數(shù)組

數(shù)組是一種初始化時指定容器大小,不可以動態(tài)調(diào)整其大小的容器。元素按 順序存儲在一串連續(xù)的內(nèi)存段上。

1、Kotlin數(shù)組創(chuàng)建技巧

arrayOf 創(chuàng)建數(shù)組

創(chuàng)建一個數(shù)組并傳遞元素值給它, 集合中的元素可以是任意類型

val array = arrayOf(1, 2, 3) 
val array = arrayOf(1, true, "2", JSONObject()) // 集合中的元素可以是任意
類型

arrayOfNulls 創(chuàng)建數(shù)組

創(chuàng)建一個指定大小的、所有元素都為空的數(shù)組,但必須指定集合中的元素類型

val arrayOfNulls = arrayOfNulls<String>(5) //創(chuàng)建一個指定大小的、所有元素
都為空的數(shù)

動態(tài)創(chuàng)建數(shù)組

用接受數(shù)組大小以及一個方法參數(shù)的 Array 構(gòu)造方法,用作參數(shù)的方法能夠 返回給定索引的每個元素初始值:

// 創(chuàng)建一個 Array<String> 初始化為 ["0", "1", "4", "9", "16"]
val asc = Array(5) { i -> (i * i).toString() }
asc.forEach { println(it) }

2、原生類型數(shù)組

在 Kotlin 中也有無裝箱開銷的專門的類來表示原生類型數(shù)組:

IntArray 函數(shù)

// 1.創(chuàng)建并初始化一個 IntArray [1, 2, 3, 4, 5]
val intArray = IntArray(1, 2, 3, 4, 5)
// 2.創(chuàng)建一個長度為 5 的空的 IntArray
val intArray2 = IntArray(5)
// 3.創(chuàng)建一個長度為 5 的值全為 100 的 IntArray [100, 100, 100, 100, 100]
val intArr2 = IntArray(5) { 100 }
// 4.注意這里 it 是它索引下標(biāo)值,所以這是創(chuàng)建一個長度為 5 的 IntArray [0, 2, 4,
6, 8]
val intArr3 = IntArray(5) { it * 2 

Tips

在 Kotlin 數(shù)組類型不是集合中的一種,但是它又和集合有著太多相似的地 方。 數(shù)組和集合可以互換初始化集合的時候可以傳入一個數(shù)組

3、數(shù)組常見的操作

獲取元素

val array =arrayOf(1,2,3,4,5)
array[index] // 獲取數(shù)組的第 index 個元素,下標(biāo)從 0 開始
array.component1() … arr.component5()獲取數(shù)組的前 5 個元素。同樣適用于集合

for 循環(huán)——元素遍歷

for (item in array) { // 元素遍歷
 println(item)
 //1
 //2
 //3
 //4
 //5
}

for 循環(huán)——下標(biāo)遍歷

for (i in array.indices) { // 根據(jù)下標(biāo)再取出對應(yīng)位置的元素
 println(i.toString() + "->" + array[i])=
 //0->1
 //1->2,
 //2->3,
 //3->4,
 //4->5
}

forEach 遍歷數(shù)組

array.forEach {
 println(it)
 //1
 //2
 //3
 //4
 //
}

forEach 增強版

array.forEachIndexed { index, item ->
 println("$index:$item")
 //0:1
 //1:2
 //2:3
 //3:4
 //4:5
}

數(shù)組翻轉(zhuǎn)

array.reverse()
>> println(array) = 5,4,3,2,1

二、Kotlin集合

Kotlin 標(biāo)準(zhǔn)庫提供了一整套用于管理集合的工具,集合是可變數(shù)量(可能為 零)的一組條目,各種集合對于解決問題都具有重要意義,并且經(jīng)常用到。 與數(shù)組不同的是可變集合的大小可以動態(tài)改變。

• List: 是一個有序集合,可通過索引(反映元素位置的整數(shù))訪問元 素。元素可以在 list 中出現(xiàn)多次。列表的一個示例是一句話:有一組 字、這些字的順序很重要并且字可以重復(fù)。

• Set: 是唯一元素的集合。它反映了集合(set)的數(shù)學(xué)抽象:一組無重 復(fù)的對象。一般來說 set 中元素的順序并不重要。例如,字母表是字 母的集合(set)。

• Map:(或者字典)是一組鍵值對。鍵是唯一的,每個鍵都剛好映射到 一個值,值可以重復(fù)。

1、集合創(chuàng)建的技巧

集合分為

可變集合,顯而易見,是指集合創(chuàng)建完成之后,可以對集合進(jìn)行增 刪改查操作

不可變集合,顯而易見,是指指集合創(chuàng)建完成之后,不能對集合進(jìn)行增刪改 查操作,會拋異常。

List 隊列

隊列是一種元素之間按照順序排列的容器,它與集合的最大區(qū)別,便是多了 個次序管理。不要小看這個有序性,正因為隊列建立了秩序規(guī)則,所以它比 集合多提供了如下功能(注意凡是涉及到增刪改的,都必須由 MutableList 來 完成):

• 不可變集合

val strings = listOf("one", "two", "one") // 不可以對 strings 進(jìn)行增刪改查操作

• 可變集合

val numbers = mutableListOf<Int>(1, 2, 3, 4) // 可以對 numbers 進(jìn)行增刪改查
操作
val numbers = arrayListOf<Int>(1, 2, 3

Tips

不難發(fā)現(xiàn),每個不可變集合都有對應(yīng)的可變集合,也就是以 mutable 為前綴 的集合。

• 不可變的 List 類型集合的初始化使用:listOf 函數(shù)

• 可變的 List 類型集合的初始化使用:mutableListOf 函數(shù)

Set 集合

1、容器內(nèi)部的元素不按順序排列,因此無法按照下標(biāo)進(jìn)行訪問;

2、容器內(nèi)部的元素存在唯一性,通過哈希值校驗是否存在相同的元素,如果 存在則覆蓋之;

• 不可變集合

val hello = setOf("H", "e", "l", "l", "o")//自動過濾重復(fù)元素
>> println(hello) = H", "e", "l","w", "o"

• 可變集合

val hello = mutableSetOf("H", "e", "l", "l", "o") //自動過濾掉重復(fù)元素
>> println(hello) = H", "e", "l","w", "o", "r", "l", "d

Tips

• 不可變的 set 類型集合的初始化使用:setOf 函數(shù)

• 可變的 set 類型集合的初始化使用:mutableSetOf 函數(shù)

Map 字典

映射內(nèi)部保存的是一組鍵值對(Key-Value),也就是說,每個元素都由兩部 分構(gòu)成,第一部分是元素的鍵,相當(dāng)于元素的名字;第二部分是元素的值, 存放著元素的詳細(xì)信息。元素的鍵與值是一一對應(yīng)的關(guān)系,相同的鍵名指向 的值對象是唯一的,所以映射中每個元素的鍵名各不相同,這個特性使得映射的變更操作與隊列存在以下不同之處(注意增刪操作必須由 MutableMap 來完成):

• 不可變集合

val numbersMap = mapOf("key1" to 1, "key2" to 2, "key3" to 3, "key4" to
1)
>> println("${numbersMap.keys}")= key1,key2,key3,key4 
>> println("${numbersMap.values}") = 1,2,3,1

• 可變集合

val numbersMap = mutableMapOf("key1" to 1, "key2" to 2, "key3" to 3,
"key4" to 1)
>> println("${numbersMap.keys}")= key1,key2,key3,key4 
>> println("${numbersMap.values}") = 1,2,3,1

Tips

• 不可變的 map 類型集合的初始化使用:mapOf 函數(shù)

• 可變的 map 類型集合的初始化使用:mutableMapOf 函數(shù)

2、集合的操作

增刪改查

val stringList = listOf("one", "two", "one") 以 list 集合為例,set,map 同樣
具備以下能力
numbers.add(5) // 集合最后面添加元素 5
numbers.addAt(1,5) // 向下標(biāo)為 1 的位置,添加元素 5,下標(biāo)為 1 及之后位置的
元素,以此后移
numbers.remove("one") // 刪除元素“one”
numbers.removeAt(1) // 刪除下標(biāo)為 1 的元素
numbers.set(0) = 0 // 下標(biāo)為 0 的元素設(shè)置為 0
numbers.get(0)==>1 // 獲取下標(biāo)為 0 的元素,結(jié)果為 

變換操作

在 Kotlin 中提供了強大對的集合排序的 API,讓我們一起來學(xué)習(xí)一下:

到此這篇關(guān)于Kotlin數(shù)據(jù)容器深入講解的文章就介紹到這了,更多相關(guān)Kotlin數(shù)據(jù)容器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • android教程之service使用方法示例詳解

    android教程之service使用方法示例詳解

    這篇文章主要介紹了android中的service使用方法示例,需要的朋友可以參考下
    2014-02-02
  • 使用Kotlin開發(fā)Android應(yīng)用的初體驗

    使用Kotlin開發(fā)Android應(yīng)用的初體驗

    本篇文章主要介紹了使用Kotlin開發(fā)Android應(yīng)用的初體驗,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • Android開發(fā)之超強圖片工具類BitmapUtil完整實例

    Android開發(fā)之超強圖片工具類BitmapUtil完整實例

    這篇文章主要介紹了Android開發(fā)之超強圖片工具類BitmapUtil,結(jié)合完整實例形式分析了Android圖片的常用操作技巧,包括圖片的加載、轉(zhuǎn)換、縮放、計算等相關(guān)操作技巧,需要的朋友可以參考下
    2017-11-11
  • Android開發(fā)中ListView自定義adapter的封裝

    Android開發(fā)中ListView自定義adapter的封裝

    這篇文章主要為大家詳細(xì)介紹了android開發(fā)中ListView自定義adapter的封裝,ListView的模板寫法,感興趣的小伙伴們可以參考一下
    2016-09-09
  • android仿微信聯(lián)系人索引列表功能

    android仿微信聯(lián)系人索引列表功能

    這篇文章主要為大家詳細(xì)介紹了android仿微信聯(lián)系人索引列表功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Android自定義超級炫酷的ViewPage指示器

    Android自定義超級炫酷的ViewPage指示器

    由于應(yīng)公司開發(fā)要求,有一個顏色漸變帶縮放的指示器,雖然網(wǎng)上很多大佬開源的指示器開源庫,但如果一直都是使用別人造的輪子,那么對于自身的能力是毫無提升作用的,即使是參考別人的,然后自己動手寫一遍那對于自身來說也是一種升華
    2022-07-07
  • Android 通知欄的使用方法

    Android 通知欄的使用方法

    不同版本通知欄的創(chuàng)建方式不盡相同,當(dāng)前官方推薦使用 NotificationCompat 相關(guān)的API,兼容到Android 4.0,但是部分新功能,比如內(nèi)嵌回復(fù)操作,舊版本是無法支持的。
    2021-05-05
  • 詳解Android截屏事件監(jiān)聽

    詳解Android截屏事件監(jiān)聽

    本篇文章主要介紹了Android截屏事件監(jiān)聽,Android系統(tǒng)沒有直接對截屏事件監(jiān)聽的接口,本文介紹了2種方法,有興趣的可以了解一下。
    2016-12-12
  • Android 攝像頭高斯模糊的示例代碼

    Android 攝像頭高斯模糊的示例代碼

    本篇文章主要介紹了Android 攝像頭高斯模糊的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • android模擬器開發(fā)和測試nfc應(yīng)用實例詳解

    android模擬器開發(fā)和測試nfc應(yīng)用實例詳解

    本文介紹android模擬器開發(fā)nfc應(yīng)用詳解,大家參考使用吧
    2013-12-12

最新評論

紫阳县| 郧西县| 福安市| 内丘县| 汾阳市| 宜都市| 会泽县| 镇雄县| 德钦县| 桓仁| 山丹县| 吴堡县| 政和县| 句容市| 调兵山市| 湖州市| 庄浪县| 东乡县| 石嘴山市| 双峰县| 呼伦贝尔市| 龙口市| 从江县| 扎赉特旗| 安岳县| 武强县| 鸡西市| 巨野县| 尼玛县| 嘉峪关市| 任丘市| 尚义县| 仲巴县| 安多县| 漳浦县| 阜新市| 南和县| 雷波县| 尤溪县| 塘沽区| 松潘县|