上一篇文章介绍了基本变量类型在Kotlin中的用法,不过这只针对单个变量,如果要求把一组相同类型的变量排列起来,形成一个变量数组,那又该如何声明和操作呢?

在Java中声明数组,跟在C语言中声明是一样的,以整型数组为例,声明并赋值的语句如下所示:

    int[] int_array = new int[] {1, 2, 3};

其它基本类型的数组声明与之类似,只要把int替换为long、float、double、boolean、char即可。但在Kotlin中,声明并赋值一个整型数组的语句是下面这样的:

    var int_array:IntArray = intArrayOf(1, 2, 3)

两相对比,对于整型数组的声明,Java与Kotlin有以下区别:
1、Kotlin另外提供了新的整型数组类型即IntArray;
2、分配一个常量数组,Kotlin调用的是intArrayOf方法,并不使用new关键字;
推而广之,其它类型的数组也各有自己的数组类型,以及对应分配常量数组的方法,说明如下:
长整型数组:数组类型为LongArray,分配方法为longArrayOf;
浮点数组:数组类型为FloatArray,分配方法为floatArrayOf;
双精度数组:数组类型为DoubleArray,分配方法为doubleArrayOf;
布尔型数组:数组类型为BooleanArray,分配方法为booleanArrayOf;
字符数组:数组类型为CharArray,分配方法为charArrayOf;
以上几种基本变量数组的声明代码举例如下:

    var long_array:LongArray = longArrayOf(1, 2, 3)
var float_array:FloatArray = floatArrayOf(1.0f, 2.0f, 3.0f)
var double_array:DoubleArray = doubleArrayOf(1.0, 2.0, 3.0)
var boolean_array:BooleanArray = booleanArrayOf(true, false, true)
var char_array:CharArray = charArrayOf('a', 'b', 'c')

  

不知读者有没有注意到,上面的数组类型不包括字符串数组,而Java是允许使用字符串数组的,代码示例如下:

    String[] string_array = new String[] {"How", "Are", "You"};

但在Kotlin这里,并不存在名为StringArray的数组类型,因为String不属于基本变量类型。要想在Kotlin中声明字符串数组,得使用Array<String>,也就是把String用尖括号包起来;同时,分配字符串数组的方法也相应变成了arrayOf,具体代码如下所示:

    var string_array:Array<String> = arrayOf("How", "Are", "You")

这种字符串数组的声明方式是不是很熟悉?看起来就跟Java里面的ArrayList用法差不多,都是在尖括号中间塞进数据结构的类型。同理,其它变量类型也能通过Array<***>方式来声明,像前面介绍的整型数组,其实可以使用类型Array<Int>,以此类推改造之后的数组声明代码如下:

    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')

  

现在声明数组和对数组赋值都有了,还需要对数组做进一步的处理,常见的处理包括获取数组长度、获取指定位置的数组元素等等,这些功能在Java与Kotlin之间的区别包括:
关于获取数组长度,Java使用.length,而Kotlin使用.size。
关于获取指定位置的数组元素,Java通过方括号加下标来获取,比如“int_array[0]”指的是得到该数组的第一个元素;Kotlin也能通过方括号加下标来获取指定元素,不过Kotlin还拥有get和set两个方法,通过get方法获取元素值,通过set方法修改元素值,看起来就像在操作ArrayList队列。
下面是字符串数组的具体操作代码:

    btn_string.setOnClickListener {
var str:String = ""
var i:Int = 0
while (i<string_array.size) {
str = str + string_array[i] + ", "
//数组元素可以通过下标访问,也可通过get方法访问
//str = str + string_array.get(i) + ", "
i++
}
tv_item_list.text = str
}

最后上个Kotlin操作各类型数组的效果动图,目的是把数组中的元素拼接成字符串并显示出来:

__________________________________________________________________________
本文现已同步发布到微信公众号“老欧说安卓”,打开微信扫一扫下面的二维码,或者直接搜索公众号“老欧说安卓”添加关注,更快更方便地阅读技术干货。

Kotlin入门(4)声明与操作数组的更多相关文章

  1. Kotlin入门(27)文件读写操作

    Java的文件处理用到了io库java.io,该库虽然功能强大,但是与文件内容的交互还得通过输入输出流中转,致使文件读写操作颇为繁琐.因此,开发者通常得自己重新封装一个文件存取的工具类,以便在日常开发 ...

  2. Kotlin入门教程——目录索引

    Kotlin是谷歌官方认可的Android开发语言,Android Studio从3.0版本开始就内置了Kotlin,所以未来在App开发中Kotlin取代Java是大势所趋,就像当初Android ...

  3. Kotlin入门(11)江湖绝技之特殊函数

    上一篇文章介绍了Kotlin对函数的输入参数所做的增强之处,其实函数这块Kotlin还有好些重大改进,集中体现在几类特殊函数,比如泛型函数.内联函数.扩展函数.尾递归函数.高阶函数等等,因此本篇文章就 ...

  4. Kotlin入门(32)网络接口访问

    手机上的资源毕竟有限,为了获取更丰富的信息,就得到辽阔的互联网大海上冲浪.对于App自身,也要经常与服务器交互,以便获取最新的数据显示到界面上.这个客户端与服务端之间的信息交互,基本使用HTTP协议进 ...

  5. Kotlin入门第二课:集合操作

    测试项目Github地址: KotlinForJava 前文传送: Kotlin入门第一课:从对比Java开始 初次尝试用Kotlin实现Android项目 1. 介绍 作为Kotlin入门的第二课, ...

  6. Kotlin入门(5)字符串及其格式化

    上一篇文章介绍了数组的声明和操作,包括字符串数组的用法.注意到Kotlin的字符串类也叫String,那么String在Java和Kotlin中的用法有哪些差异呢?这便是本文所要阐述的内容了. 首先要 ...

  7. 写给Android开发者的Kotlin入门

    写给Android开发者的Kotlin入门 转 https://www.jianshu.com/p/bb53cba6c8f4 Google在今年的IO大会上宣布,将Android开发的官方语言更换为K ...

  8. Kotlin入门(28)Application单例化

    Application是Android的又一大组件,在App运行过程中,有且仅有一个Application对象贯穿应用的整个生命周期,所以适合在Application中保存应用运行时的全局变量.而开展 ...

  9. Kotlin入门(16)容器的遍历方式

    Kotlin号称全面兼容Java,于是乎Java的容器类仍可在Kotlin中正常使用,包括大家熟悉的队列ArrayList.映射HashMap等等.不过Kotlin作为一门全新的语言,肯定还是要有自己 ...

随机推荐

  1. zookeeper常用指令

    zk服务 bin 目录下常用的脚本解释 zkCleanup 清理 Zookeeper 历史数据,包括日志文件和快照数据文件 zkCli Zookeeper 的一个简易客户端 zkEnv 设置 Zook ...

  2. 一个简单的C语言题背后的故事

    最近看到了一个C语言问题,是要计算出这个函数的输出: #include <stdio.h> int Test(int x,int y, int z){ printf("x,y,z ...

  3. 机器学习技法笔记:06 Support Vector Regression

    Roadmap Kernel Ridge Regression Support Vector Regression Primal Support Vector Regression Dual Summ ...

  4. Python——使用代码平台进行识别验证码

    打码平台介绍 一般使用超级鹰或打码兔的打码平台. 超级鹰介绍 打开http://www.chaojiying.com/contact.html注册用户,生成软件ID 下载python的demo文件 查 ...

  5. 【OSX】解决编译AOSP时需要10.5/10.6 SDK下载

    有人遇到的是需要10.6的sdk. 公司网快下载了xcode, 把里面的10.5sdk和10.6sdk拿出来, 一共才一百多兆…… 下载链接: http://pan.baidu.com/s/1gdxG ...

  6. leetcode — swap-nodes-in-pairs

    /** * Source : https://oj.leetcode.com/problems/swap-nodes-in-pairs/ * * Created by lverpeng on 2017 ...

  7. OOP 面向对象的理解

    概念 面向对象编程(OOP)是一种编程语言模型,围绕对象是行为.数据.逻辑. 从历史上看,程序被视为一种逻辑程序,它接收输入数据,处理数据并生成输出数据. 基础 面向对象的3大核心思想:封装.继承.多 ...

  8. openWin和openFrame 设置透明背景

    openWin简单点说就是:像是一个浏览器 openFrame就是对应openWin浏览器里面打开的每一个网页 有些操作只能在openWin里面执行,比如监听安卓返回事件,只能在openWin里面才有 ...

  9. EXTJS4 Grid Filter 插件的使用 与后台数据解析------Extjs 查询筛选功能的实现

    先汗一个,一个小功能又踢腾了一天.本来这个带Demo的,但是上面介绍的不是很详细.用的时候问题不大,主要问题在文件导入方面.以为这个插件的使用和其他的不一样. 1.首先是需要引入文件的位置:如图 需要 ...

  10. JAVA中的集合容器操作类

    目录 JAVA中的集合容器操作类 List集合 ArrayList的操作方法说明 LinkedList Stack Set Map Queue 总结 JAVA中的集合容器操作类 Java容器类库总共分 ...