Kotlin 中的数组:别怕,其实很简单
\n\n如果你从 Java 转到 Kotlin,或者刚开始学习这门现代语言,“如何在 Kotlin 中初始化带值的数组”这个问题几乎会立刻出现。在 Stack Overflow 上,这个话题已经积累了数千次浏览——说明它确实很重要。
\n\n好消息是:Kotlin 让数组操作比 Java 方便得多。坏消息是:有几种方法,新手常常会混淆。让我们一次性彻底搞懂所有Kotlin 数组初始化的方式——从简单到复杂,并附上真实的代码示例。
\n\n1. 最简单的方法:arrayOf()
\n\narrayOf() 函数是你的基本工具。它根据传入的值创建数组,并自动确定类型。
// 整数数组\nval numbers = arrayOf(1, 2, 3, 4, 5)\n\n// 字符串数组\nval fruits = arrayOf("苹果", "香蕉", "橙子")\n\n// 混合类型数组 (Any)\nval mixed = arrayOf(42, "Kotlin", true)\n\nprintln(numbers.contentToString()) // [1, 2, 3, 4, 5]\nprintln(fruits.contentToString()) // [苹果, 香蕉, 橙子]\n\n\n重要提示:arrayOf() 创建的是 Array<T>——对象数组。如果你需要原始类型(int、char、boolean)以提高性能,请继续往下看。
2. 原始类型数组:intArrayOf()、doubleArrayOf() 等
\n\nKotlin 为每种原始类型提供了专门的函数。它们节省内存且运行更快:
\n\n// 整数\nval intArr = intArrayOf(10, 20, 30, 40, 50)\n\n// 浮点数\nval doubleArr = doubleArrayOf(1.5, 2.7, 3.14)\n\n// 布尔值\nval boolArr = booleanArrayOf(true, false, true)\n\n// 字符\nval charArr = charArrayOf('K', 'o', 't', 'l', 'i', 'n')\n\n// 字节\nval byteArr = byteArrayOf(0x48, 0x65, 0x6C, 0x6C, 0x6F) // "Hello"\n\nprintln(intArr.joinToString()) // 10, 20, 30, 40, 50\n\n\n完整列表:intArrayOf、doubleArrayOf、floatArrayOf、longArrayOf、shortArrayOf、byteArrayOf、booleanArrayOf、charArrayOf。
何时使用?如果处理大量数据或编写高性能代码——请使用原始类型数组。对于常规任务,arrayOf() 完全够用。
3. 数组构造函数:带 lambda 的 Array(size)
\n\n最灵活的Kotlin 数组初始化方式——使用带 lambda 表达式的构造函数。你指定大小和填充规则:
\n\n// 0 到 4 的平方数\nval squares = Array(5) { i -> i * i }\nprintln(squares.contentToString()) // [0, 1, 4, 9, 16]\n\n// 10 个随机数的数组\nimport kotlin.random.Random\nval randoms = Array(10) { Random.nextInt(100) }\nprintln(randoms.contentToString()) // [42, 17, 83, 5, 91, ...]\n\n// 带模板的字符串数组\nval labels = Array(3) { index -> "元素 #${index + 1}" }\nprintln(labels.contentToString()) // [元素 #1, 元素 #2, 元素 #3]\n\n\nlambda 接收元素的索引(从 0 到 size-1),并必须返回一个值。这是一个强大的工具——你可以根据任何规则填充数组,包括调用函数。
\n\n4. arrayOfNulls()——带空单元格的数组
\n\n有时需要先创建数组,稍后再填充。这时可以使用 arrayOfNulls():
// 包含 5 个 null 元素的数组\nval nullArray = arrayOfNulls<String>(5)\nprintln(nullArray.contentToString()) // [null, null, null, null, null]\n\n// 稍后填充\nnullArray[0] = "第一个"\nnullArray[2] = "第三个"\nprintln(nullArray.contentToString()) // [第一个, null, 第三个, null, null]\n\n\n需要显式指定类型——编译器