Kotlin 數據容器 - List(List 概述、創建 List、List 核心特性、List 元素訪問、List 遍歷)

一、List 概述

  1. List 是一個不可變的有序集合,一旦創建就不能修改其內容,即不能添加、刪除、更改元素

  2. List 提供了豐富的操作函數來處理數據


二、創建 List

1、基礎創建
  1. 通過 listOf 函數創建(推薦)
// 創建一個 List,包含 3 個元素
val fruitList = listOf("Apple", "Banana", "Orange")println("fruitList: $fruitList")
# 輸出結果fruitList: [Apple, Banana, Orange]
  1. 通過 List 構造函數創建
// 創建一個 List,包含 5 個元素,基于索引計算每個元素的值
val numberList = List(5) { it * 2 }// 創建一個 List,包含 3 個元素,每個元素都是 "Kotlin"
val repeatList = List(3) { "Kotlin" }// 創建一個 List,包含 5 個元素,每個元素都是 Unit
val testList = List(5) {}println("numberList: $numberList")
println("repeated: $repeatList")
println("testList: $testList")
# 輸出結果numberList: [0, 2, 4, 6, 8]
repeated: [Kotlin, Kotlin, Kotlin]
2、創建空 List
  1. 通過 emptyList 函數創建
val emptyList1 = emptyList<String>()println("emptyList1: $emptyList1")
# 輸出結果emptyList1: []
  1. 通過 listOf 函數創建
val emptyList2 = listOf<String>()println("emptyList2: $emptyList2")
# 輸出結果emptyList2: []
  1. 通過 List 構造函數創建
val emptyList3 = List(0) { it }println("emptyList3: $emptyList3")
# 輸出結果emptyList3: []

三、List 核心特性

1、類型推斷
  1. 明確類型
val stringList1 = listOf<String>("A", "B")
// 等同于val stringList2 = listOf("A", "B")
  1. 類型推斷
val anyList = listOf(1, "test", true) // 類型推斷為 List<Any>
2、不可變性
val fruitList = listOf("Apple", "Banana", "Orange")fruitList[0] = "Watermelon"
# 輸出結果(編譯錯誤)Kotlin: Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: 
public inline operator fun kotlin.text.StringBuilder /* = java.lang.StringBuilder */.set(index: Int, value: Char): Unit defined in kotlin.textKotlin: No set method providing array access
val fruitList = listOf("Apple", "Banana", "Orange")fruitList.add("Watermelon")
# 輸出結果(編譯錯誤)Kotlin: Unresolved reference: add

四、List 元素訪問

1、基礎訪問
  • 通過 [] 操作符與 get 方法訪問
val colors = listOf("紅", "綠", "藍")val first = colors[0]
val second = colors.get(1)println("first: $first")
println("second: $second")
  • 它們都會拋出索引越界異常
val colors = listOf("紅", "綠", "藍")val result = colors[10]println("result: $result")
# 輸出結果java.lang.ArrayIndexOutOfBoundsException: Index 10 out of bounds for length 3
val colors = listOf("紅", "綠", "藍")val result = colors.get(10)println("result: $result")
# 輸出結果java.lang.ArrayIndexOutOfBoundsException: Index 10 out of bounds for length 3
2、安全訪問
(1)基本介紹
方法說明
firstOrNull返回 List 的第一個元素,如果 List 為空則返回 null
lastOrNull返回 List 的最后一個元素,如果 List 為空則返回 null
getOrNull返回指定索引的元素,如果索引超出范圍則返回 null
getOrElse返回指定索引的元素,如果索引超出范圍則返回默認值
(2)演示
val colors = listOf("紅", "綠", "藍")val result1 = colors.firstOrNull()
val result2 = colors.lastOrNull()
val result3 = colors.getOrNull(5)
val result4 = colors.getOrElse(5) { "默認顏色" }println("result1: $result1")
println("result2: $result2")
println("result3: $result3")
println("result4: $result4")
# 輸出結果result1: 紅
result2: 藍
result3: null
result4: 默認顏色
val colors = emptyList<String>()val result1 = colors.firstOrNull()
val result2 = colors.lastOrNull()
val result3 = colors.getOrNull(5)
val result4 = colors.getOrElse(5) { "默認顏色" }println("result1: $result1")
println("result2: $result2")
println("result3: $result3")
println("result4: $result4")
# 輸出結果result1: null
result2: null
result3: null
result4: 默認顏色
3、條件檢索
val colors = listOf("red", "green", "blue", "yellow")// 找到第一個符合條件的
val result1 = colors.first { it.length >= 5 }// 找到最后一個符合條件的
val result2 = colors.last { it.length == 4 }println("result1: $result1")
println("result2: $result2")
# 輸出結果result1: green
result2: blue

五、List 遍歷

1、for 循環(推薦)
  1. 遍歷元素
val list = listOf("Apple", "Banana", "Orange")for (item in list) {println(item)
}
# 輸出結果Apple
Banana
Orange
  1. 遍歷索引
val list = listOf("Apple", "Banana", "Orange")for (i in list.indices) {println("Index $i: ${list[i]}")
}
# 輸出結果Index 0: Apple
Index 1: Banana
Index 2: Orange
2、使用 forEach 方法(推薦)
val list = listOf("Apple", "Banana", "Orange")list.forEach { println(it) }
# 輸出結果Apple
Banana
Orange
val list = listOf("Apple", "Banana", "Orange")list.forEach { item ->println(item)
}
# 輸出結果Apple
Banana
Orange
3、使用 forEachIndexed 方法(推薦)
val colors = listOf("紅", "綠", "藍")colors.forEachIndexed { index, item ->println("Index $index: $item")
}
# 輸出結果Index 0: 紅
Index 1: 綠
Index 2: 藍
4、使用迭代器
val colors = listOf("紅", "綠", "藍")val iterator = colors.iterator()while (iterator.hasNext()) {println(iterator.next())
}
# 輸出結果紅
綠
藍
5、使用 withIndex 方法
val colors = listOf("紅", "綠", "藍")for ((index, value) in colors.withIndex()) {println("$index: $value")
}
# 輸出結果0: 紅
1: 綠
2: 藍
6、使用 List.size + get 方法
val fruitList = listOf("Apple", "Banana", "Orange")for (i in 0 until fruitList.size) {println(fruitList.get(i))
}
# 輸出結果Apple
Banana
Orange

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

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

相關文章

HarmonyOS NEXT 系列之規范開發三方共享包

規范開發三方共享包〇、前言一、了解評分規則二、規范開發共享包1、規范開源協議名稱寫法2、將 oh-package.json5 文件補充完整3、補充 example 目錄4、基本的 README 和 CHANGELOG三、ohpm 包的源碼隔離特性〇、前言 對于開發者來說&#xff0c;對外發布代碼制品&#xff0c;…

[電網備考]計算機組成與原理

計算機系統概述 計算機發展歷程 從數據表示: 計算機可以分為數字計算機與模擬計算機 1946 第一臺電子數字計算機 ENIAC 在賓夕法尼亞大學誕生,標志進入電子計算機時代時間計算機發展階段1946-1958電子管計算機時代1958-1964晶體管計算機時代1964-1971集成電路計算機時代1971-至…

8.c語言指針

內存管理C語言中&#xff0c;棧內存&#xff08;局部變量&#xff09;自動分配/釋放&#xff0c;靜態區&#xff08;全局、靜態變量&#xff09;編譯時分配&#xff1b;堆內存需手動分配/釋放&#xff0c;核心函數有3個&#xff1a;malloc函數原型&#xff1a;void* malloc(siz…

使用GPU訓練模型

本文代碼詳解參考&#xff1a; 模型訓練基礎流程-CSDN博客 目錄 為什么要用GPU訓練模型 什么是CUDA 利用GPU訓練—方式一(.cuda()) 利用GPU訓練—方式二 (.to()) Google Colaboratory 為什么要用GPU訓練模型 用 GPU 訓練模型的核心原因是GPU 的硬件架構和計算特性&#…

Matlab學習筆記:自定義函數

MATLAB 學習筆記&#xff1a;自定義函數自定義函數是MATLAB編程的基礎&#xff0c;它允許你將重復代碼封裝成可重用的模塊&#xff0c;提高代碼的可讀性和效率。本筆記將覆蓋所有重點知識點&#xff0c;包括語法細節、輸入輸出處理、函數文件管理、錯誤處理等。我會用自然易懂的…

【數學建模 | Matlab】二維繪圖 和 三維繪圖

- 第 115 篇 - Date: 2025 - 07 - 23 Author: 鄭龍浩&#xff08;仟墨&#xff09; 續寫上一篇&#xff0c;如下文章&#xff1a; 【數學建模|Matlab】Matlab「基礎知識」和「基礎操作」 五 二維繪圖 1 舉例 % 二維平面繪圖&#xff08;擴展至 -2π 到 2π&#xff09; x …

MCP (Model Context Protocol) 與 HTTP API:大模型時代的通信新范式

MCP (Model Context Protocol) 與 HTTP API&#xff1a;大模型時代的通信新范式在數字世界的兩端&#xff0c;API 扮演著不可或缺的橋梁角色。我們熟知的 HTTP API 是 Web 互聯互通的基石&#xff0c;驅動著無數應用程序的交互。然而&#xff0c;隨著大型語言模型&#xff08;L…

CentOS 搭建 Docker 私有鏡像倉庫

CentOS 搭建 Docker 私有鏡像倉庫 搭建 Docker 私有鏡像倉庫能為團隊提供高效、安全的鏡像管理方案。下面將詳細介紹每個步驟的操作細節&#xff0c;其中命令部分均用代碼塊展示。 一、環境準備 要搭建 Docker 私有鏡像倉庫&#xff0c;首先得確保服務器環境符合要求&#xff0…

Zookeeper的簡單了解

Zookeeper的簡單了解 Zookeeper是一個為分布式應用程序提供協調服務的中間件。 主要作用有三點&#xff1a;分布式鎖、注冊中心、配置管理、。 特點有讀寫速度快&#xff08;內存存儲&#xff09;、有監聽機制&#xff08;用于發布訂閱&#xff09;、保證了順序一致性&#xff…

Android Fragment 全解析

在 Android 開發中&#xff0c;Fragment 是構建靈活界面的核心組件 —— 它既能像 “迷你 Activity” 一樣包含布局和邏輯&#xff0c;又能靈活地嵌入到不同 Activity 中復用。無論是平板的多面板布局&#xff0c;還是手機的單頁切換&#xff0c;Fragment 都能讓界面適配更高效…

0-1BFS(雙端隊列,洛谷P4667 [BalticOI 2011] Switch the Lamp On 電路維修 (Day1)題解)

對于權重為0或1的路徑搜索中&#xff0c;使用雙端隊列可以對最短路問題進行時間復雜度的優化&#xff0c;由于優先隊列的O(longn)級別的插入時間&#xff0c;對于雙端隊列O(1)插入可以將時間復雜度減少至O(M); https://www.luogu.com.cn/problem/P4667 #include<bits/stdc…

基于LNMP架構的分布式個人博客搭建

1.運行環境主機主機名系統服務192.168.75.154Server-WebLinuxWeb192.168.75.155Server-NFS-DNSLinuxNFS/DNS2.基礎配置配置主機名&#xff0c;靜態IP地址開啟防火墻并配置部分開啟SElinux并配置服務器之間使用同ntp.aliyun.com進行時間同步服務器之間使用用ntp.aliyun.com進行時…

基于開源AI智能名片鏈動2+1模式S2B2C商城小程序的人格品牌化實現路徑研究

摘要&#xff1a;在數字化消費時代&#xff0c;人格品牌化已成為企業突破同質化競爭的核心策略。本文以開源AI智能名片、鏈動21模式與S2B2C商城小程序的融合為切入點&#xff0c;構建“技術賦能-關系重構-價值共生”的人格品牌化理論框架。通過分析用戶觸達、信任裂變與價值沉淀…

設計模式十一:享元模式(Flyweight Pattern)

享元模式是一種結構型設計模式&#xff0c;它通過共享對象來最小化內存使用或計算開銷。這種模式適用于大量相似對象的情況&#xff0c;通過共享這些對象的公共部分來減少資源消耗。基本概念享元模式的核心思想是將對象的內在狀態&#xff08;不變的部分&#xff09;和外在狀態…

Webpack/Vite 終極指南:前端開發的“渦輪增壓引擎“

開篇:當你的項目變成"俄羅斯套娃" "我的index.js怎么引入了87個文件?!" —— 這是每個前端開發者第一次面對復雜項目依賴時的真實反應。別擔心,今天我要帶你認識兩位"打包俠":老牌勁旅Webpack和新銳黑馬Vite 一、構建工具:前端世界的&qu…

Windows 下配置 GPU 用于深度學習(PyTorch)的完整流程

1. 安裝 NVIDIA 顯卡驅動 前往 NVIDIA官網 下載并安裝適合你顯卡型號&#xff08;如 5070Ti&#xff09;的最新版驅動。下載 NVIDIA 官方驅動 | NVIDIA安裝完成后建議重啟電腦。 2. 安裝 CUDA Toolkit 前往 CUDA Toolkit 下載頁。 選擇 Windows、x86_64、你的系統版本&#…

詳解力扣高頻SQL50題之180. 連續出現的數字【困難】

傳送門&#xff1a;180. 連續出現的數字 題目 表&#xff1a;Logs -------------------- | Column Name | Type | -------------------- | id | int | | num | varchar | -------------------- 在 SQL 中&#xff0c;id 是該表的主鍵。 id 是一個自增列。 找出所有至少連續…

VSCode 報錯 Error: listen EACCES: permission denied 0.0.0.0:2288

使用 npm run dev 啟動項目時報錯&#xff1a;error when starting dev server: Error: listen EACCES: permission denied 0.0.0.0:2288at Server.setupListenHandle [as _listen2] (node:net:1881:21)at listenInCluster (node:net:1946:12)at Server.listen (node:net:2044:…

[2025CVPR-圖象超分辨方向]DORNet:面向退化的正則化網絡,用于盲深度超分辨率

1. ?問題背景與挑戰? 盲深度超分辨率&#xff08;Blind Depth Super-Resolution, DSR&#xff09;的目標是從低分辨率&#xff08;LR&#xff09;深度圖中恢復高分辨率&#xff08;HR&#xff09;深度圖&#xff0c;但現有方法在真實場景下面臨顯著挑戰&#xff1a; ?已知…

關系與邏輯運算 —— 寄存器操作的 “入門鑰匙”

前言 哈嘍大家好&#xff0c;這里是 Hello_Embed 的新一篇學習筆記。在前文中&#xff0c;我們學習了如何用結構體指針操作硬件寄存器&#xff0c;而寄存器的配置往往離不開位運算和條件判斷 —— 比如通過邏輯運算精準修改某幾位的值&#xff0c;通過關系運算判斷硬件狀態。這…