7:kotlin 數組 (Arrays)

數組是一種數據結構,它保存固定數量的相同類型或其子類型的值。kotlin中最常見的數組類型是對象類型數組,數組由array類表示。

什么時候使用

當你在kotlin中有特殊的底層需求需要滿足時,可以使用數組。例如,如果你有超出常規應用所需的性能要求,或者你需要構建自定義的數據結構。如果你沒有這些限制,那么可以使用集合(Collections)。

與數組相比,集合有以下優點:

  • 集合可以是只讀的,這給你提供了更多的控制權,使你能夠編寫具有明確意圖的健壯代碼。
  • 從集合中添加或刪除元素很容易。相比之下,數組的大小是固定的。從數組中添加或刪除元素的唯一方法是每次都創建一個新的數組,這非常低效
    fun main() {val riversArray1 = arrayOf("Nile", "Amazon", "Yangtze")val riversArray2 = riversArray1 + "Mississippi"println(riversArray1.joinToString())    // Nile, Amazon, Yangtzeprintln(riversArray2.joinToString())    // Nile, Amazon, Yangtze, Mississippi
    }
    
  • 可以使用==來比較兩個集合是否相同,但是不能使用該操作來比較數組

創建數組

  • arrayOf()arrayOfNulls() emptyArray()
    fun main() {val simpleArray = arrayOf(1, 2, 3)println(simpleArray.joinToString()) // 1, 2, 3val nullArray: Array<Int?> = arrayOfNulls(3)println(nullArray.joinToString())   // null, null, nullval exampleArray1 = emptyArray<String>()val exampleArray2: Array<String> = emptyArray()println(exampleArray1.joinToString())   //  空println(exampleArray2.joinToString())   // 空
    }
    
  • Array 的構造方法

    Array構造函數接受數組大小和一個函數,該函數根據數組的索引返回數組元素的值

    fun main() {val initArray = Array<Int>(3) { 0 }println(initArray.joinToString()) // 0, 0, 0val asc = Array(5) { i -> (i * i).toString() }println(asc.joinToString())   // 014916
    }
    

嵌套數組

fun main() {// 兩層嵌套val twoDArray = Array(2) { Array<Int>(2) { 0 } }println(twoDArray.contentDeepToString()) // [[0, 0], [0, 0]]// 三層嵌套val threeDArray = Array(3) { Array(3) { Array<Int>(3) { 0 } } }println(threeDArray.contentDeepToString())  // [[[0, 0, 0], [0, 0, 0], [0, 0, 0]], [[0, 0, 0], [0, 0, 0], [0, 0, 0]], [[0, 0, 0], [0, 0, 0], [0, 0, 0]]]
}

嵌套數組可以是不通長度不同類型

獲取/修改

數組中的元素是可變的,如果想要獲取和修改數組中的元素需要使用[索引]來操作

fun main() {val simpleArray = arrayOf(1, 2, 3)val twoDArray = Array(2) { Array<Int>(2) { 0 } }// 修改元素simpleArray[0] = 10twoDArray[0][0] = 2println(simpleArray[0].toString()) // 10println(twoDArray[0][0].toString()) // 2
}

使用數組

kotlin中,數組可以作為方法的可變數量參數使用,也可以對數組本身做操作,如比較數組、轉換數組內容,轉成集合等

可變數量參數

可變數量參數使用vararg 聲明,傳遞參數前使用*

fun main() {val lettersArray = arrayOf("c", "d")printAllStrings("a", "b", *lettersArray)// abcd
}fun printAllStrings(vararg strings: String) {for (string in strings) {print(string)	}
}

比較

對比數據需要使用.contentEquals()或者.contentDeepEquals()方法

fun main() {val simpleArray = arrayOf(1, 2, 3)val anotherArray = arrayOf(1, 2, 3)println(simpleArray.contentEquals(anotherArray))    // true// 修改元素simpleArray[0] = 10 println(simpleArray contentEquals anotherArray) // false
}

常用方法

求和

fun main() {val sumArray = arrayOf(1, 2, 3)println(sumArray.sum()) // 6
}

洗牌(打亂順序)

隨機打亂順序

fun main() {val simpleArray = arrayOf(1, 2, 3)simpleArray.shuffle()println(simpleArray.joinToString()) // 1, 3, 2simpleArray.shuffle()println(simpleArray.joinToString()) // 2, 1, 3
}

轉成集合

轉成List或者Set使用.toList()或者.toSet()方法

fun main() {val simpleArray = arrayOf("a", "b", "c", "c")println(simpleArray.toSet()) // [a, b, c]println(simpleArray.toList())// [a, b, c, c]
}

轉成Map使用.toMap方法
只有鍵值對數組才能轉成Map

fun main() {val pairArray = arrayOf("apple" to 120, "banana" to 150, "cherry" to 90, "apple" to 140)println(pairArray.toMap()) // {apple=140, banana=150, cherry=90}
}

基本類型數組

如果使用上文中的數組,數據類型會被包裝成Object類型,如果需要存儲基本數據類型的元素,可以使用基本數據類型數組,避免開裝箱造成的性能損失

基本類型數組有

  • BooleanArray
  • ByteArray
  • CharArray
  • DoubleArray
  • FloatArray
  • IntArray
  • LongArray
  • ShortArray

雖然這寫類和Array沒有繼承關系,但是具有相同的方法

Object類型數組和基本類型數組可以互轉

fun main() {val intObjArray = arrayOf(1, 2, 3, 4)intObjArray.toIntArray()    // 轉成Int數組val intArray = intArrayOf(1, 2, 3, 4)intArray.toTypedArray() // 轉成Object數組val booleanArray = booleanArrayOf(false, true)booleanArray.toTypedArray()val booleanObjArray = arrayOf(false, true)booleanObjArray.toBooleanArray()
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/166116.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/166116.shtml
英文地址,請注明出處:http://en.pswp.cn/news/166116.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

關于js的find的基本用法

Array.prototype.find() 是 JavaScript 的一個數組方法&#xff0c;它被用來在數組中查找一個符合條件的元素。一旦找到第一個符合條件的元素, find() 會立即返回這個元素的值&#xff0c;否則返回 undefined。 以下是 find() 方法的基本語法&#xff1a; arr.find(callback(el…

?LeetCode解法匯總1410. HTML 實體解析器

目錄鏈接&#xff1a; 力扣編程題-解法匯總_分享記錄-CSDN博客 GitHub同步刷題項目&#xff1a; https://github.com/September26/java-algorithms 原題鏈接&#xff1a;力扣&#xff08;LeetCode&#xff09;官網 - 全球極客摯愛的技術成長平臺 描述&#xff1a; 「HTML 實…

利用企業被執行人信息查詢API保障商業交易安全

前言 在當今競爭激烈的商業環境中&#xff0c;企業為了保障商業交易的安全性不斷尋求新的手段。隨著技術的發展&#xff0c;利用企業被執行人信息查詢API已經成為了一種強有力的工具&#xff0c;能夠幫助企業在商業交易中降低風險&#xff0c;提高合作的信任度。 企業被執行人…

如何使用 JavaScript 實現圖片上傳并轉換為 LaTeX 公式

在本教程中&#xff0c;我們將學習如何使用 JavaScript 創建一個上傳圖片的功能&#xff0c;并將所選圖片轉換為 LaTeX 公式。我們將使用 FileReader 對象來讀取圖片并將其轉換為 Base64 格式&#xff0c;然后利用 img2latex API 將其轉換為 LaTeX 公式。 1. HTML 結構 首先&…

SpringMVC日志追蹤筆記整理

新建logback-spring.xml <?xml version"1.0" encoding"UTF-8"?> <configuration><property name"PATH" value"./log/business"></property><appender name"STDOUT" class"ch.qos.logback…

linux進程調度(三)-進程終止

文章目錄 2.3 進程退出的幾種情況2.4 進程終止過程分析2.4.1 exit_notify函數2.4.1.1 forget_original_parent函數2.4.1.1.1 find_child_reaper函數2.4.1.1.2 find_new_reaper函數2.4.1.1.3 reparent_leader函數 2.4.1.2 do_notify_parent函數2.4.1.3 release_task函數 2.4.2 d…

GitHub桌面版

GitHub桌面版 一、GitHub 桌面版二、clone 倉庫三、更新倉庫 一、GitHub 桌面版 二、clone 倉庫 三、更新倉庫

穆桂英掛帥

《穆桂英掛帥》 作家&#xff0f;羅光記 穆桂英掛帥破敵&#xff0c; 威風凜凜立戰場。 鐵甲如云奔雷急&#xff0c; 英姿颯爽傲寒霜。 烽火連天戰鼓擂&#xff0c; 旌旗翻飛壯心驚。 刀光劍影映紅日&#xff0c; 豪情壯志天地驚。 風云變幻戰事急&#xff0c; 英勇穆桂英…

Azure Machine Learning - Azure可視化圖像分類操作實戰

目錄 一、數據準備二、創建自定義視覺資源三、創建新項目四、選擇訓練圖像五、上傳和標記圖像六、訓練分類器七、評估分類器概率閾值 八、管理訓練迭代 在本文中&#xff0c;你將了解如何使用Azure可視化頁面創建圖像分類模型。 生成模型后&#xff0c;可以使用新圖像測試該模型…

溫馨提示!辦理流量卡千萬不要填寫別人的身份證信息,切記!

可以用別人的身份證辦理流量卡嗎&#xff1f;是很多朋友都比較關注的一個問題&#xff0c;在這里明確的告訴大家一下&#xff0c;當然是不可以的。 ?  不管你是在線下營業廳辦理&#xff0c;還是在線上申請&#xff0c;都是需要提供本人的證件信息才能辦理&#xff1a; 1、…

TIDB拓撲結構

TiDB Server&#xff1a;SQL層&#xff0c;負責接受客戶端的連接&#xff0c;執行SQL解析和優化&#xff0c;最終生成分布式執行計劃。TiDB Server為無狀態的&#xff0c;可增加節點負載均衡。 PD (Placement Driver) Server&#xff1a;整個TiDB集群的元信息管理模塊&#xf…

【超詳細】手搓一個微信日記本

&#x1f380; 文章作者&#xff1a;二土電子 &#x1f338; 關注公眾號獲取更多資料&#xff01; &#x1f438; 期待大家一起學習交流&#xff01; 這里對之前的微信記事本小程序進行了重新編寫&#xff0c;增加了更加詳細的步驟描述&#xff0c;將全部圖片都改成了本地圖…

用EasyAVFilter將網絡文件或者本地文件推送RTMP出去的時候發現CPU占用好高,用的也是vcodec copy呀,什么原因?

最近同事在用EasyAVFilter集成在EasyDarwin中做視頻拉流轉推RTMP流的功能的時候&#xff0c;發現怎么做CPU占用都會很高&#xff0c;但是視頻沒有調用轉碼&#xff0c;vcodec用的就是copy&#xff0c;這是什么原因呢&#xff1f; 我們用在線的RTSP流就不會出現這種情況&#x…

SSM個性化旅游管理系統開發mysql數據庫web結構java編程計算機網頁源碼eclipse項目

一、源碼特點 SSM 個性化旅游管理系統是一套完善的信息系統&#xff0c;結合springMVC框架完成本系統&#xff0c;對理解JSP java編程開發語言有幫助系統采用SSM框架&#xff08;MVC模式開發&#xff09;&#xff0c;系統具有完整的源代碼和數據庫 &#xff0c;系統主要采用B…

raid磁盤陣列

在單機時代&#xff0c;采用單塊磁盤進行數據存儲和讀寫的方式&#xff0c;由于尋址和讀寫的時間消耗&#xff0c;導致I/O性能非常低&#xff0c;且存儲容量還會受到限制。另外&#xff0c;單塊磁盤極其容易出現物理故障&#xff0c;經常導致數據的丟失。此時&#xff0c;RAID技…

Java設計模式

&#x1f648;作者簡介&#xff1a;練習時長兩年半的Java up主 &#x1f649;個人主頁&#xff1a;程序員老茶 &#x1f64a; ps:點贊&#x1f44d;是免費的&#xff0c;卻可以讓寫博客的作者開心好久好久&#x1f60e; &#x1f4da;系列專欄&#xff1a;Java全棧&#xff0c;…

新材料制造ERP用哪個好?企業應當如何挑選適用的

有些新材料存在特殊性&#xff0c;并且在制造過程中對車間、設備、工藝、人員等方面提出更高的要求。還有些新材料加工流程復雜&#xff0c;涉及多種材料的請購、出入庫、使用和管理等環節&#xff0c;解決各個業務環節無縫銜接問題是很多制造企業面臨的管理難題。 新材料制造…

牙科診所小程序開發案例

一、背景&#xff1a; 針對傳統口腔醫療領域中口腔診所推廣難,紙質信息保存難等問題&#xff0c;設計并開發了基于微信小程序實現口腔服務助手平臺。為了給人們提供便捷&#xff0c;快速的預約方式&#xff0c;提高社會人群對口腔健康的關注力度。通過微信小程序互聯網技術&…

文旅虛擬人IP:數字時代的傳統文化推薦官

近幾年&#xff0c;隨著文旅虛擬人頻“上崗”&#xff0c;虛擬人逐漸成為了文旅品牌的一種新穎的傳統文化傳播思路。 文旅品牌定制化推出虛擬人&#xff0c;本質原因是2023旅游業全面復蘇&#xff0c;各文旅玩法同質化現象嚴重&#xff0c;在這樣的境遇下&#xff0c;文旅品牌開…

OpenMLDB v0.8.4 診斷工具全面升級

新的v0.8.4版本中&#xff0c;我們對于診斷工具進行了全面系統化的升級&#xff0c;以提供更加完整和智能化的診斷報告&#xff0c;有助于高效排查 OpenMLDB 集群問題&#xff0c;大幅提升運維效率。 相比于之前的版本&#xff0c;新的診斷工具增添一鍵診斷功能&#xff0c;使…