Kotlin基础语法-数组

Kotlin基础语法-数组

  • 一、创建数组
    • 创建数组的两种方式:
  • 二、使用数组
    • 使用for-in循环遍历数组
    • 使用迭代器遍历方式
  • 三、多维数组
  • 四、数组常用方法

一、创建数组

Kotlin创建数组就是创建Array类的实例,Kotlin即可允许通过Array类的构造器来创建实例,也可以通过arrayOf()等工具函数来创建实例。

创建数组的两种方式:

  • 使用xxArrayOf()、arrayOf()、arrayOfNulls()、emptyArray()工具函数;
  • 使用Array(size:Int,init:(Int)->T)构造器。
 //静态初始化数组(可以是八种基本数据类型)
 var intArrayOf = intArrayOf(1, 2, 3) //返回IntArray
 var doubleArrayOf = doubleArrayOf(1.0, 2.1, 3.12)
 intArrayOf.set(0, 4) //可以修改指定索引位置元素
 intArrayOf[0] = 4 //同上是等价的
 
 //Kotlin采用xxArray数组(包含8种基本类型的数组)。
 val intArray = IntArray(5) 
 intArray[0] = 1

// 创建包含指定元素的数组(相当于Java数组的静态初始化)
 var array = arrayOf("Java", "Kotlin", "C", "C++")
 var intArr = arrayOf(1, 20, 3, 14, 5)
 var arr = arrayOf(1, 2, 100, -10, 2.0, "sss")

 //创建指定长度、元素为null的数组(相当于Java数组的动态初始化)
 var nullArrStr = arrayOfNulls<String>(5)
 var nullArrInt = arrayOfNulls<Int>(6)
 //对应索引位置赋值
 nullArrInt[0] = 1
 nullArrInt[1] = 2
 nullArrInt[2] = 3 
 
 //创建空数组,只读,不能赋值(实际上它是大小为0继承自arrayOfNulls,返回Array类型)
 val emptyArray = emptyArray<Int>() 

 //可以设置初始值,默认为空
 var strArr4 = Array(6) { "" }
 strArr4[0] = "sdlf"
 //第二个参数以lambda表达式初始化数组元素
 var arr4 = Array(5, { (it * 2 + 97).toChar() })
 var arr4 = Array(5) { (it * 2 + 97).toChar() }//同上
 //默认赋值为0
 var arrayInt = Array(5) { 0 }
 arrayInt[0] = 12
 

二、使用数组

 var array = arrayOf("Java", "Kotlin", "C", "C++")
 //使用两种方式获取数组元素
 println(arr1[1])
 println(arr1.get(1))
 //使用两种方式修改数组元素
 arr1[1] = "Python"
 arr1.set(2, "Go")
 //arr1.contentToString()等同Arrays.toString(arr1)
 println(arr1.contentToString())

输出结果:

Kotlin
Kotlin
[Java, Python, Go, C++]

使用for-in循环遍历数组

 var array = arrayOf("Java", "Kotlin", "C", "C++")
 for (i in arr4) {
 	println("---array=$i")
 }
 //带索引方式
 for (i in arr1.indices) {
    println("index=$i--${arr1[i]}")
 }
 //还可以使用数组的withIndex()方法来同时访问数组的索引和元素,该方法返回一个Iterable对象
for ((index, value) in arr1.withIndex()) {
    println("索引为${index}的元素是:${value}")
 }

输出结果:

---array=Java
---array=Python
---array=Go
---array=C++

index=0--Java
index=1--Python
index=2--Go
index=3--C++

索引为0的元素是:Java
索引为1的元素是:Python
索引为2的元素是:Go
索引为3的元素是:C++

还可以使用in、!in来检查某个索引是否位于数组的索引区间内。

val arrayOf = arrayOf<Int>(1, 2, 3)
//将返回false
println("在数组arrayOf索引范围内:${4 in arrayOf.indices}")

使用迭代器遍历方式

var array = arrayOf("Java", "Kotlin", "C", "C++")
// 迭代器遍历数组1
val it = arr1.iterator()
 for (item in it.iterator()) {
     println(item)
 }
 // 迭代器遍历数组2
 val it1 = arr1.iterator()
 it1.forEach {
     println(it)
 }

 // forEach遍历数组
 arr1.forEach {
     println(it)
 }

输出结果:

Java
Python
Go
C++

三、多维数组

 //Kotlin可以使用arrayOf()方法来初始化二维数组。
 val arrayOf = arrayOf(arrayOfNulls<Int>(5), Array(4) { "arr" })

 //或者采用把arrayOfNulls使array当成一维数组进行初始化,初始化array是一个长度为4的数组,默认是空的
 //array数组的元素又是Array类型数组,形成二维数组
 var array = arrayOfNulls<Array<Int>>(4)
 //把a数组当成一维数组,遍历a数组的每个数组元素
 for (i in array.indices) {
     println("array ${array[i]}")
 }
 //初始化a数组的第一个元素
 array[0]= arrayOf(2,5,3)
 //访问array数组的第一个元素所指数组的第二个元素
 array[0]?.set(1, 6)
 //array数组的第一个元素是一个一维数组,遍历这个一维数组
 for (i in array[0]!!.indices) {
     println(array[0]?.get(i))
 }

输出结果:

array null
array null
array null
array null
2
6
3

四、数组常用方法

var arr1 = arrayOf("Java", "Kotlin", "C", "C++")

//通过赋值arr1数组,生成一个新的数组
 val copyOf = arr1.copyOf()//全部复制
 val copyOf1 = arr1.copyOf(2)//复制前两个
 val copyOf2 = arr1.copyOfRange(1,2)//复制左闭右开区间

 println(copyOf.contentToString())
 println(copyOf1.contentToString())
 println(copyOf2.contentToString())
 
 var arr = arrayOf(1,2,3,4,5,6,7)
 //将arr数组的第五个元素到第七个元素赋值为1
 arr.fill(1,4,6)
 //输出arr数组的元素
 println("arr数组的元素为:${arr.contentToString()}")
 //对数组排序
 arr.sort()
 println("arr数组的排序:${arr.contentToString()}")
 //将来原来的数组拷贝了一下,并且长度+1,然后给数组添加新的元素
 val plus = arr.plus(8)
 println("arr数组的plus:${arr.contentToString()}---给定元素:${plus.contentToString()}")

输出结果:

[Java, Kotlin, C, C++]
[Java, Kotlin]
[Kotlin]
b数组的元素为:[1, 2, 3, 4, 1, 1, 7]
arr数组的plus:[1, 1, 1, 2, 3, 4, 7]---给定元素:[1, 1, 1, 2, 3, 4, 7, 8]

更多kotlin语法使用

你可能感兴趣的:(kotlin)