Android Kotlin(3)之《基本类型与集合》

Android Kotlin第三篇,这篇我们一起来了解下Kotlin基础类型与集合,也许我有的地方没有写好,也欢迎大家提出问题,纠正问题

一、数字类型

Kotlin对数字处理与java差不多,Kotlin支持数字类型如下:

    val doubles : Double = 123.5e10 //Double,64
    val floats : Float = 1.0f //Float,32
    val longs : Long = 1L //Long,64
    val ints : Int = 1 //Int,32
    val shorts : Short = 1 //Short,16
    val bytes : Byte = 1 //Byte,8

Kotlin支持十进制、十六进制以及二进制,目前还不支持八进制

    val tenType : Int = 10 //支持十进制,默认是十进制
    val sixteenType : Byte = 0x22 //支持十六进制,0x开头标示十六进制
    val twoType : Int = 0b00000010 //支持二进制,0b开头表示二进制

与java不同之处
1、数字类型支持字面值中的下划线,这样让长数字常量更已读,例如:

    val ints1 = 1_001_000
    val longs2 = 1234_5678_9012_3456L
    val hexBytes = 0xFF_EC_DE_5E
    val bytew = 0b11010010_01101001_10010100_10010010

2、Kotlin数据类型转化与java不同

      val a: Int? = 1
//    val b: Long? = a//这样隐式转换有问题,不能编译
//    val c: Long? = (Long)a//像java一样强转也不行,不能编译

Kotlin提供了更加强大的转化功能
每个数字类型都支持一下的转化:
toByte(): Byte
toShort(): Short
toInt(): Int
toLong(): Long
toFloat(): Float
toDouble(): Double
toChar(): Char

    val d: Long? = a?.toLong()
    //算术运算会有重载做适当转换
    val l = 1L + 3 // Long + Int => Long

当然接下来的其他类型大部分也都支持以上转化,例如:字符等
3、位运算

//    这是完整的位运算列表(只用于 Int 和 Long):
//    shl(bits) – 有符号左移 (Java 的 <<)
//    shr(bits) – 有符号右移 (Java 的 >>)
//    ushr(bits) – 无符号右移 (Java 的 >>>)
//    and(bits) – 位与
//    or(bits) – 位或
//    xor(bits) – 位异或
//    inv() – 位非
    val x = (1 shl 2) and 0x000FF000

二、字符类型(Char)

字符类型,单引号括起来且只能一个字符。
特殊字符可以用反斜杠转义。 支持这几个转义序列:\t、 \b、\n、\r、'、"、\ 和 $

    val char1 : Char = 'a'
    val char2 : Char = '1'
    val cInt : Int = char2.toInt()//字符类型转Int
    //字符类型转Int方法
    fun CharToInt(c: Char): Int {
        if (c !in '0'..'9')
            throw IllegalArgumentException("Out of range")
        return c.toInt() - '0'.toInt() // 显式转换为数字
    }

三、布尔类型()

与java差不多,唯一区别就是,Kotlin不只是true或false,还支持null,例如:

    val bool1 : Boolean = true
    val bool2 : Boolean? = null//加上?就可以对布尔类型赋值null
    fun test4() : String{
        return bool2.toString()//就算调用null,输出打印,也不会报错,这就是Kotlin空安全强大之处
    }

四、集合、数组类型

与大多数语言不同,Kotlin 区分可变集合和不可变集合(lists、sets、maps 等)。精确控制什么时候集合可编辑有助于消除 bug 和设计良好的 API。

Kotlin 的 List<out T> 类型是一个提供只读操作如 size、get等的接口。和 Java 类似,它继承自 Collection<T> 进而继承自 Iterable<T>。

改变 list 的方法是由 MutableList<T> 加入的。

这一模式同样适用于 Set<out T>/MutableSet<T> 及 Map<K, out V>/MutableMap<K, V>。

    val numbers: MutableList<Int> = mutableListOf(1, 2, 3)
    val OnlyReadList: List<Int> = numbers
    fun test5() : String{
//        readOnlyView.clear()    // -> 不能编译
//        return numbers.toString()       // 输出 "[1, 2, 3]"
        numbers.add(4)
        return OnlyReadList.toString()   // 输出 "[1, 2, 3, 4]"
    }

1、Arrays

Kotlin 标准库提供了arrayOf()创建数组, **ArrayOf创建特定类型数组

    val array = arrayOf(1,2,3)
    //和Java不一样,Kotlin 的数组是容器类
    // 提供了 ByteArray, CharArray, ShortArray, IntArray, LongArray, BooleanArray, FloatArray, and DoubleArray。
    val intArray = intArrayOf(1,2)

public inline constructor(size: Int, init: (Int) -> T)
创建一个具有指定[size]的新数组,其中每个元素通过调用指定的值来计算。函数的作用是:返回给定索引的数组元素。例如:

    val array1 = Array(10, { k -> k * k })//这里k代表元素的索引位置
//  return array1.get(2).toString()//输出4,因为索引是2,输出:k*k = 2*2 = 4
    val array2 = Array(10,{k -> "位置:"+(k+1) })
//  return array2.get(5).toString() //输出"位置:6",因为索引是5,输出:"位置:"+(k+1) = "位置:"+(6+1) = 位置:6
    val emptyArray = emptyArray<Long>()

当然你也创建对象数组

   class Student(val name : String?){
    }
   //当然你也创建对象数组
   val studentArray = Array<Student>(10,{k -> Student("学生编号:"+k)})
// return studentArray.get(6).name.toString()
   studentArray[6] = Student("张三")
   return studentArray.get(6).name.toString()

2、Lists

List是有序容器,Kotlin 标准库通过listOf()创建list
你可以这样申明

        val list1 = listOf<Int>()

当然也可以这样,list1与list2意思一样

        val list2 : List<Int> = listOf(1,2,3,4,5,6)

当然你也可以付初始默认值,也可以不指定类型

        val list3 = listOf(1,2,"3")

如果你想对list2进行添加或者修改时,就不行了,因为List<T>只能读,这时候你需要声明个可以操作的属性

        val list4 : MutableList<Any> = list3.toMutableList()//这里将List转换出可以编辑的
        list4.add("4")
//        list4.set(0,10)
//        return list4.toString()//输出:[1, 2, 3, 4]
//        return list3.toString()//输出:[1, 2, 3]

对list4操作不会影响list3,list4相当于复制出来的

//        return (list4.first() == 1).toString()//当然也有list4.last()

当然也可以按一定条件筛选

//        return list2.filter { (it % 2) == 0 }.toString()
        val list5 : MutableList<Int> = mutableListOf(1,2,3,4)
        val list6 : List<Int> = list5
        list5.add(5)
//        return list5.toString()//输出:[1, 2, 3, 4, 5]
        return list6.toString()//输出:[1, 2, 3, 4, 5]

        val emptyList: List<String> = emptyList<String>()
        val nonNulls: List<String> = listOfNotNull<String>(null, "a", "b", "c")

3、Maps

Map是<key, value>容器, Kotlin提供mapOf创建map

    fun test8() : String{
        val map1 = mapOf("a" to 1, "b" to 2, "c" to 3)
//        return map1.toString()
        val map2 = hashMapOf("a" to 1, "b" to 2, "c" to 3)
//        return map2.toString()
        val map3 : MutableMap<String, String> = mutableMapOf("a" to "a", "b" to "b", "c" to "c")
//        return map3.toString()
        val map4 : LinkedHashMap<String, String> = linkedMapOf("a" to "a", "b" to "b", "c" to "c")
//        return map4.toString()
        val map5 : SortedMap<String, String> = sortedMapOf("a" to "a", "b" to "b", "c" to "c")
        return map5.toString()
        return ""
    }

4、Sets

Set是没有重复项的容器, Kotlin提供setOf创建Set

    fun test9() : String{
        val set1: Set<Int> = setOf(1,2,3,3,4) //1,2,3,4
//        return set1.toString()
        val set2: HashSet<String> = hashSetOf("1","2","3","3")//3,2,1
//        return set2.toString()
        val set3: SortedSet<Int> = sortedSetOf(11, 0, 9, 11, 9, 8)//0,8,9,11
        return set3.toString()
        return ""
    }

五、字符串类型

支持这几个转义序列:\t、 \b、\n、\r、'、"、\ 和 $

    val string1 : String = "1"
    val string2 = "Hello, world!\n"

字符串模板表达式
字符串可以包含模板表达式 ,即一些小段代码,会求值并把结果合并到字符串中。 模板表达式以美元符($)开头,由一个简单的名字构成:

        val string3 = "a = $string1"
//        return string3
        val string4 = "$string3.length is ${string3.length}"
        return string4 //输出a = 1.length is 5
``
到此,基本类型就介绍完了,谢谢大家的观赏。最近更新速度有点慢,给自己加油,加快速度更新

[源码下载](https://github.com/xiaoqiang008/AndroidKotlin)这里源码会随着后面发布的Kotlin逐渐完善
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容