icode icode
首页
  • Android学习

    • 📁基础内容
    • 📺AndroidCore
    • 🎨Android-UI
    • 🏖️Components
    • 📊Fragment
    • 🔗网络操作
    • 🔏异步机制
    • 📦数据存储
    • 🗃️Gradle
  • 学习笔记

    • 『框架』笔记
    • 『Kotlin』笔记
    • 《Vue》笔记
    • 《Git》学习笔记
    • 『Bug踩坑记录』
  • ListView
  • RecyclerView
  • ViewPager
  • Java笔记

    • 🟠JavaSE
    • 🟢JavaWeb
    • 🔴JavaEE
    • ⚪JavaTopic
    • 🍳设计模式
  • 计算机基础

    • 📌计算机网络
    • 🔍数据结构
    • 📦数据库
    • 💻OS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
  • 关于

    • 📫关于我
  • 收藏

    • 网站
    • 资源
    • Vue资源
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

iqqcode

保持对技术的探索实践与热爱
首页
  • Android学习

    • 📁基础内容
    • 📺AndroidCore
    • 🎨Android-UI
    • 🏖️Components
    • 📊Fragment
    • 🔗网络操作
    • 🔏异步机制
    • 📦数据存储
    • 🗃️Gradle
  • 学习笔记

    • 『框架』笔记
    • 『Kotlin』笔记
    • 《Vue》笔记
    • 《Git》学习笔记
    • 『Bug踩坑记录』
  • ListView
  • RecyclerView
  • ViewPager
  • Java笔记

    • 🟠JavaSE
    • 🟢JavaWeb
    • 🔴JavaEE
    • ⚪JavaTopic
    • 🍳设计模式
  • 计算机基础

    • 📌计算机网络
    • 🔍数据结构
    • 📦数据库
    • 💻OS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
  • 关于

    • 📫关于我
  • 收藏

    • 网站
    • 资源
    • Vue资源
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Kotlin语言基础

    • 数据类型
    • 数组的使用
      • 1. Kotlin数组的创建方式
        • 第一种:arrayOf创建数组
        • 第二种:arrayOfNulls创建数组
        • 第三种:动态创建数组
        • 创建空数组
        • 原生类型数组
      • 2. 数组的使用
        • 2.1 获取元素
        • 2.2 基本使用
        • 2.3. 遍历数组
        • 2.4. 修改数组
        • 2.5. 元素是否在数组内
        • 2.6. 数组工具方法
    • Kotlin集合
    • Kotlin流程控制
    • Kotlin方法
    • 类和方法
    • Lambda表达式
    • Kotlin泛型
  • Kotlin笔记
  • Kotlin语言基础
iqqcode
2021-06-02
目录

数组的使用

# 1. Kotlin数组的创建方式

Kotlin创建数组大致有如下两种方式:

  1. 使用arrayOf(), arrayOfNulls(),emptyArray()工具函数。
  2. 使用使用工厂函数,Array(size: Int, init:(Int) -> T)

数组用类 Array 实现,并且还有一个 size 属性及 get 和 set 方法,由于使用 [] 重载了 get 和 set 方法,所以我们可以通过下标很方便的获取或者设置数组对应位置的值。


Java中创建数组:

// 创建数组的第一种方法
int[] arr = new int[6];

// 创建数组的第二种方法
int[] x = {1,2,3,4};

// 创建数组的第三种方法。
int[] y = new int[] {1,2,3,4,5};
1
2
3
4
5
6
7
8

# 第一种:arrayOf创建数组

使用arrayOf()创建数组,必须指定数组元素,可以是任意类型

kotlin中的 Any 等价于 Java中的 Object 对象

fun main(args: Array<String>) {
    // 数据类型: Boolean、Shot、Int、Long、Float、Double、Char

    // 创建包含指定元素的数组(Java数组静态初始化)
    val arrString = arrayOf("java", "kotlin",true, "2", JSONObject())
    println(arrString.contentToString())
    
    val arrInt = arrayOf(1, 2, 3)
    println(arrInt.contentToString())


    // 创建指定长度,元素为null的数组(Java动态初始化)
    val arr2 = arrayOfNulls<String>(6)
    arr2[0] = "Java"
    arr2.set(1, "Kotlin")
    println(arr2.contentToString())
    
    val arr2Double = arrayOfNulls<Double>(8)
    arr2Double[0] = 10.0
    arr2Double.set(1, 22.0)
    println(arr2Double.contentToString())
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

输出结果

[java, kotlin]
[1, 2, 3]
[Java, Kotlin, null, null, null, null]
[10.0, 22.0, null, null, null, null, null, null]
1
2
3
4

使用arrayOf的完整定义

var string_array:Array<String> = arrayOf("How", "Are", "You")
var int_array:Array<Int> = arrayOf(1, 2, 3)
var long_array:Array<Long> = arrayOf(1, 2, 3)
var float_array:Array<Float> = arrayOf(1.0f, 2.0f, 3.0f)
var double_array:Array<Double> = arrayOf(1.0, 2.0, 3.0)
var boolean_array:Array<Boolean> = arrayOf(true, false, true)
var char_array:Array<Char> = arrayOf('a', 'b', 'c')
1
2
3
4
5
6
7

# 第二种:arrayOfNulls创建数组

创建一个指定大小的、所有元素都为空的数组,但必须指定集合中的元素类型

 val arrayOfNulls = arrayOfNulls<String>(5)  //创建一个指定大小的、所有元素都为空的数组
1

创建实例:

val arrays:Array<String?> = arrayOfNulls<String>(5)
arrays[0] = null
arrays[1] = "kotlin"
println(arrays.contentToString())
1
2
3
4
  • 创建一个指定大小、所有元素都为空的数组,但是必须指定集合中的元素类型
  • <String?>是指:代表数组中对象为可空的,即arrays数组可存放空对象

# 第三种:动态创建数组

用接受数组大小以及一个方法参数的 Array 构造方法,用作参数的方法能够返回给定索引的每个元素初始值

// 创建一个 Array<String> 初始化为 ["0", "1", "4", "9", "16"]
val asc = Array(5) { i -> (i * i).toString() }
asc.forEach { println(it) }
1
2
3

it指的是索引值,{}相当于是一个函数, 可以根据it任意设置

fun main(args: Array<String>) {
    val arrayInt = Array<Int>(5, arrInit())
    val nums1 = 0..4 // 区间表达式,代表0-4
    for (num in nums1) {
        arrayInt[num]
    }
    println(arrayInt.contentToString())


    val arrayInitTwo = Array<Int>(5) { it }
    val nums2 = 0..4
    for (num in nums2) {
        arrayInitTwo[num]
    }
    println(arrayInitTwo.contentToString())


    val b = Array(3) { i -> (i * 2) }
    val nums3 = 0..2
    for (num in nums3) {
        b[num]
    }
    println(b.contentToString())

}

fun arrInit(): (Int) -> Int = { it * 3 }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

输出结果

[0, 3, 6, 9, 12]
[0, 1, 2, 3, 4]
[0, 2, 4]
1
2
3

# 简洁写法

除了类Array,还有ByteArray, ShortArray, IntArray,用来表示各个类型的数组,省去装箱操作,效率更高,其用法同Array一样:

    val x: IntArray = intArrayOf(1, 2, 3)
	booleanArrayOf(false, true)
    charArrayOf('a', 'b')
    byteArrayOf(1, 2)
    shortArrayOf(1, 2)
    longArrayOf(1L, 2L)
    floatArrayOf(1F, 2F)
    doubleArrayOf(4.0, 5.0, 6.0)
1
2
3
4
5
6
7
8

或者

fun main(args: Array<String>) {
    val empty = emptyArray<Int>()

    val otherArray1 = IntArray(6) {it}

    val otherArray2 = IntArray(6) {it * 2}

    println(empty.contentToString())
    println(otherArray1.contentToString())
    println(otherArray2.contentToString())

}

>>> 输出

[0, 1, 2, 3, 4, 5]
[0, 2, 4, 6, 8, 10]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 创建空数组

val emptyArray = emptyArray<Int>()

>>> 输出
[]
1
2
3
4

创建一个指定大小的、所有元素都为空的数组,但必须指定集合中的元素类型

 val arrayOfNulls = arrayOfNulls<String>(5)  //创建一个指定大小的、所有元素都为空的数组
1

# 原生类型数组

在Kotlin中也有无装箱开销的专门的类来表示原生类型数组

原生类型数组 解释
ByteArray 字节型数组
ShortArray 短整型数组
IntArray 整型数组
LongArray 长整型数组
BooleanArray 布尔型数组
CharArray 字符型数组
FloatArray 浮点型数组
DoubleArray 双精度浮点型数组
fun main(args: Array<String>) {
    // 1.创建并初始化一个IntArray  [1, 2, 3, 4, 5]
    val intArray1 = intArrayOf(1, 2, 3, 4, 5)

    // 2.创建一个长度为5的空的IntArray
    val intArray2 = IntArray(5)

    // 3.创建一个长度为5的值全为100的IntArray [100, 100, 100, 100, 100]
    val intArray3 = IntArray(5) { 100 }

    // 4.注意这里it是它索引下标值,所以这是创建一个长度为5的IntArray [0, 2, 4, 6, 8]
    val intArray4 = IntArray(5) { it * 2 }
}
1
2
3
4
5
6
7
8
9
10
11
12
13

# 2. 数组的使用

# 2.1 获取元素

val array =arrayOf(1,2,3,4,5)

array[index] // 获取数组的第index个元素,下标从0开始
array.component1()..array.component5() //获取数组的前5个元素。同样适用于集合
1
2
3
4

# 2.2 基本使用

asList() 将该数组转成list的集合

arr.all({it > 20}) 判断是否数组里的值都大于20,如果是返回true,不是返回false

arr.any({it > 20}) 判断是否数组里的值其中有一个大于20,如果是返回true,不是返回false

根据数组元素来计算<K, V>对,返回所有的<K, V>对组成的Map集合。例如 k + 2, v + 10

var arrMap = arr.associate({it + 2 to it + 10})
1

arr.fill(1, 4, 6) 将数组arr的第5个元素(包括)到底7个元素(不包括)赋值为1


# 2.3. 遍历数组

方式一

var arr = arrayOf(1, 2, 3)
for (item in arr){
	println(item)
}
1
2
3
4

方式二:通过索引

var arr = arrayOf(1,2,3)
for (index in arr.indices){
	println(index)
	println(arr[index])
}
1
2
3
4
5

方式三:函数式

var arr = arrayOf(1,2,3)
arr.forEach { item ->
	println(item)
}
1
2
3
4

# 2.4. 修改数组

for (index in arr.indices){
	// 和Java一样的修改方式
	arr[index]=1
    
	// kotlin 可以set
	arr.set(index,1)
}
1
2
3
4
5
6
7

# 2.5. 元素是否在数组内

    var arr = arrayOf(1, 2, 3)

    if ( 1 in arr){
        println("1确实在")
    }

    if ( 5 !in arr){
        println("5确实不在")
    }
1
2
3
4
5
6
7
8
9

# 2.6. 数组工具方法

Array.forEach()

Array.reverse()

Array.filter()

Array.sort()

Array.any()

Array.count()

Array.find()

Array.map()

Array.flatMap()

Array.find()

Array.flod()

Array.groupBy()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
编辑 (opens new window)
#kotlin
上次更新: 2022/06/04, 11:36:35
数据类型
Kotlin集合

← 数据类型 Kotlin集合→

最近更新
01
匿名内部类
10-08
02
函数式接口
10-08
03
ARouter-Kotlin踩坑
10-05
更多文章>
Theme by Vdoing | Copyright © 2021-2023 iqqcode | MIT License | 备案号-京ICP备2021028793号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×