Kotlin數(shù)據(jù)容器(1)??數(shù)組

  • 對(duì)象數(shù)組
  • 基本數(shù)據(jù)類型數(shù)組

??數(shù)據(jù)容器是基于某種數(shù)據(jù)結(jié)構(gòu)的,常見的數(shù)據(jù)結(jié)構(gòu)有數(shù)組 (Array)蹈胡、集 (Set)渊季、隊(duì)列 (Queue)朋蔫、鏈表 (Linkedlist)、樹 (Tree)梭域、堆 (Heap)斑举、棧 (Stack) 和 映射 (Map) 等結(jié)構(gòu)搅轿。

  • 數(shù)組

??數(shù)組 (Array) 是一種罪基本的數(shù)據(jù)結(jié)構(gòu)病涨,數(shù)組具有三個(gè)基本特性:
??(1) 一致性。數(shù)組只能保持相同數(shù)據(jù)類型的元素璧坟;
??(2) 有序性既穆。數(shù)組中的元素是有序的,通過下標(biāo)訪問雀鹃,數(shù)組的下標(biāo)從零開始幻工;
??(3) 不可變性。數(shù)組一旦初始化黎茎,則長(zhǎng)度(數(shù)組中元素的個(gè)數(shù))不可變囊颅。

??為兼容 Java 中數(shù)組和提高訪問效率,Kotlin 將數(shù)組分為 對(duì)象數(shù)組基本數(shù)據(jù)類型數(shù)組傅瞻。

一踢代、對(duì)象數(shù)組

??kotlin 對(duì)象數(shù)組是 Array<T>,其中只能保存對(duì)象嗅骄,這里對(duì)象對(duì)應(yīng)的是 Java 中的對(duì)象胳挎,例如 Java 中的 int 只是基本數(shù)據(jù)類型,而 Integer 才是 Java 對(duì)象溺森。

??下面是 Kotlin 中8種數(shù)據(jù)類型數(shù)組慕爬,與編譯后的 Java 代碼比較。

// kotlin 8種基本數(shù)據(jù)類型數(shù)組

fun main(args: Array<String>?) {
    val ints: Array<Int> = arrayOf(1)
    val shorts: Array<Short> = arrayOf(1)
    val btyes: Array<Byte> = arrayOf(3)
    val longs: Array<Long> = arrayOf(34)

    val floats: Array<Float> = arrayOf(23.2f)
    val doubles: Array<Double> = arrayOf(3.3)
    val chars: Array<Char> = arrayOf('a')
    val booleans: Array<Boolean> = arrayOf(false)
}
// kotlin 通過轉(zhuǎn)換編譯后的 java 代碼

@Metadata(
   mv = {1, 1, 15},
   bv = {1, 0, 3},
   k = 2,
   d1 = {"\u0000\u0014\n\u0000\n\u0002\u0010\u0002\n\u0000\n\u0002\u0010\u0011\n\u0002\u0010\u000e\n\u0002\b\u0002\u001a\u001b\u0010\u0000\u001a\u00020\u00012\u000e\u0010\u0002\u001a\n\u0012\u0004\u0012\u00020\u0004\u0018\u00010\u0003¢\u0006\u0002\u0010\u0005¨\u0006\u0006"},
   d2 = {"main", "", "args", "", "", "([Ljava/lang/String;)V", "kotlin_module"}
)
public final class WwwwKt {
   public static final void main(@Nullable String[] args) {
      Integer[] var10000 = new Integer[]{1};
      Short[] var9 = new Short[]{Short.valueOf((short)1)};
      Byte[] var10 = new Byte[]{3};
      Long[] var11 = new Long[]{34L};
      Float[] var12 = new Float[]{23.2F};
      Double[] var13 = new Double[]{3.3D};
      Character[] var14 = new Character[]{'a'};
      Boolean[] var15 = new Boolean[]{false};
   }
}

??注意:通過上面的編譯對(duì)比屏积,kotlin 對(duì)象數(shù)組中保存的8中基本類型的數(shù)據(jù)医窿,他們都會(huì)編譯成 Java 包裝類數(shù)組,而不是 Java 基本數(shù)據(jù)類型數(shù)組炊林。即如下對(duì)應(yīng)關(guān)系:

kotlin 對(duì)象數(shù)組 Java包裝類數(shù)組
Array<Byte> java.lang.Byte[]
Array<Short> java.lang.Short[]
Array<Int> java.lang.Integer[]
Array<Long> java.lang.Long[]
Array<Float> java.lang.Float[]
Array<Double> java.lang.Double[]
Array<Char> java.lang.Char[]
Array<Boolean> java.lang.Boolean[]

二姥卢、基本數(shù)據(jù)類型數(shù)組

kotlin 中創(chuàng)建對(duì)象數(shù)組有3中方式:

  • arrayOf(vararg elements: T) 工廠函數(shù):指定數(shù)組元素列表,創(chuàng)建元素類型為 T 的數(shù)組铛铁,vararg 表明參數(shù)個(gè)數(shù)是可變的隔显。

  • arrayOfNulls<T>(size: Int) 函數(shù):size 參數(shù)指定數(shù)組大小,創(chuàng)建元素為 T 的數(shù)組饵逐,數(shù)組中的元素為空值(即:null)括眠。

  • Array(size: Int, init: (Int) -> T) 構(gòu)造函數(shù):通過 size 參數(shù)指定數(shù)組大小,init 參數(shù)指定一個(gè)用于初始化元素的函數(shù)倍权,實(shí)際使用時(shí)經(jīng)常是 Lambda 表達(dá)式掷豺,索引值從0開始捞烟。

fun <T> printArray(array: Array<T>) {
    val printStr = if (array.isEmpty()) "[]" else array.joinToString(", ", "[", "]")
    println(printStr)
}

fun main(args: Array<String>?) {
    val array1 = arrayOf(1, 2, 4, 5, 6)
    val array2 = arrayOfNulls<Char>(3)
    array2[0] = 'a'
    array2[1] = 'b'
    val array3 = Array<Int>(5) { it * it } // 尾隨lambda表達(dá)式
    val array4 = Array<String>(3) { i -> "張家老$i" }
    val array5 = arrayOfNulls<Boolean>(0)
    printArray(array1)
    printArray(array2)
    printArray(array3)
    printArray(array4)
    printArray(array5)
}

2019-06-12 10:40:30.649 5875-5875/cn.ak.kot I/System.out: [1, 2, 4, 5, 6]
2019-06-12 10:40:30.650 5875-5875/cn.ak.kot I/System.out: [a, b, null]
2019-06-12 10:40:30.650 5875-5875/cn.ak.kot I/System.out: [0, 1, 4, 9, 16]
2019-06-12 10:40:30.650 5875-5875/cn.ak.kot I/System.out: [張家老0, 張家老1, 張家老2]
2019-06-12 10:40:30.650 5875-5875/cn.ak.kot I/System.out: []

??Array(size: Int, init: (Int) -> T) 構(gòu)造函數(shù)可以表示為Array<Int>(10, {i -> i * i})或者Array<Int>(10){i -> i * i},后者稱為尾隨 Lambda 表達(dá)式当船,使用尾隨 Lambda 表達(dá)式的前提是题画,一個(gè)函數(shù)的最后一個(gè)參數(shù)是函數(shù)類型,在用 Lambda 表達(dá)式為實(shí)際參數(shù)時(shí)德频,可以將 Lambda 表達(dá)式移到函數(shù)的小括號(hào)之后苍息,詳細(xì)關(guān)于 Lambda 表達(dá)式使用可以查看《Kotlin函數(shù)式編程 (2)Lambda表達(dá)式》

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末壹置,一起剝皮案震驚了整個(gè)濱河市竞思,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌钞护,老刑警劉巖盖喷,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異难咕,居然都是意外死亡课梳,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門余佃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來暮刃,“玉大人,你說我怎么就攤上這事咙冗≌赐幔” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵雾消,是天一觀的道長(zhǎng)灾搏。 經(jīng)常有香客問我,道長(zhǎng)立润,這世上最難降的妖魔是什么狂窑? 我笑而不...
    開封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮桑腮,結(jié)果婚禮上泉哈,老公的妹妹穿的比我還像新娘。我一直安慰自己破讨,他們只是感情好丛晦,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著提陶,像睡著了一般烫沙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上隙笆,一...
    開封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天锌蓄,我揣著相機(jī)與錄音升筏,去河邊找鬼。 笑死瘸爽,一個(gè)胖子當(dāng)著我的面吹牛您访,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播剪决,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼灵汪,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了昼捍?” 一聲冷哼從身側(cè)響起识虚,我...
    開封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎妒茬,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蔚晨,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡乍钻,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了铭腕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片银择。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖累舷,靈堂內(nèi)的尸體忽然破棺而出浩考,到底是詐尸還是另有隱情,我是刑警寧澤被盈,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布析孽,位于F島的核電站,受9級(jí)特大地震影響只怎,放射性物質(zhì)發(fā)生泄漏袜瞬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一身堡、第九天 我趴在偏房一處隱蔽的房頂上張望邓尤。 院中可真熱鬧,春花似錦贴谎、人聲如沸汞扎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)澈魄。三九已至,卻和暖如春蕾哟,著一層夾襖步出監(jiān)牢的瞬間一忱,已是汗流浹背莲蜘。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留帘营,地道東北人票渠。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像芬迄,于是被迫代替她去往敵國(guó)和親问顷。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355