Kotlin(二)資料類型
一.基本資料類型
基本資料類型名稱 | kotlin | java |
---|---|---|
整型 | Int | int、Integer |
長整型 | Long | long、Long |
浮點型 | Float | float、Float |
雙精度 | Double | double、Double |
布爾型 | Boolean | boolean、Boolean |
字元型 | Char | char |
字元串型 | String | String |
在java中聲明變量我們會這樣:int i = 0;
但在kotlin中聲明變量不可以是Int i = 0;正确的聲明方式是var i:Int = 0;另外類型之間的轉換kotlin有自己的一套方法,即“to+類型名”,例如轉為字元串型就是f.toString(),可參考如下:
類型轉換方法 | 說明 |
---|---|
toInt | 轉整型 |
toLong | 轉長整型 |
toFloat | 轉浮點型 |
toDouble | 轉雙精度數 |
toChar | 轉字元 |
toString | 轉字元串 |
二.數組
kotlin中數組的類型名稱是以“資料類型名+Array”的形式來命名,例如IntArray,它的初始化方法就是intArrayOf()。一般的數組初始化方式如下:
var array1:IntArray = intArrayOf(1, 2, 3)
var array2:LongArray = longArrayOf(100, 200, 300)
var array3:FloatArray = floatArrayOf(1.0f, 2.1f, 3.4f)
var array4:DoubleArray = doubleArrayOf(1.0, 2.3, 3.5)
var array5:BooleanArray = booleanArrayOf(true, false, true)
var array6:CharArray = charArrayOf('a', 'W', 'G')
你會發現這裡少了String類型數組的初始化,因為String本身是一個特殊的資料類型,kotlin中沒有StringArray的數組類型,是以對于String類型數組的聲明要用Array<String>的方式:
var array_string:Array<String> = arrayOf("bom", "adc", "def");
同樣的其餘的六種資料類型也可以用這種方式來聲明數組:
var array_int:Array<Integer> = arrayOf(1, 2, 3);
var array_long:Array<Long> = arrayOf(11, 111, 111);
var array_float:Array<Float> = arrayOf(1f, 1.6f, 3.8f);
var array_double:Array<Double> = arrayOf(1.9, 44.9, 3.0);
var array_boolean:Array<Boolean> = arrayOf(true, false, false);
var array_char:Array<Char> = arrayOf('s', 'E', 'E');
kotlin的數組對象的取值和java一樣,都是以array_int[i]的方式來取值,但是kotlin數組對象還提供了get、set方法來操作數組資料,即array_int.get(i); array_int.set(0, 44);不過set方法不太常用,kotlin推薦使用array_int[0]=44。對于所有的數組類型都可以用in和!in關鍵字來判斷數組中是否包含某元素:
var array1:Array<Int> = arrayOf(1, 32, 43, 5)
var mark:Boolean = 32 in array1
三.字元串
前面提到了String是特殊的那個資料類型,它具備了許多可以操作自身的方法,這裡就單獨搞出來說一說。首先列一下字元串對象轉換為其它六個資料類型的方法:
轉換目标 | kotlin | java |
---|---|---|
整型 | str.toInt() | Integer.parseInt(str) |
長整型 | str.toLong() | Long.parseLong(str) |
浮點型 | str.toFloat() | Float.parseFloat(str) |
雙精度 | str.toDouble() | Double.parseDouble(str) |
布爾 | str.toBoolean() | Boolean.parseBoolean(str) |
字元數組 | str.toCharArray() | str.toCharArray() |
kotlin的字元串對象也提供了查找、截取、分割、拼接等一些方法
var str:String = "wode boke.xxx.no.money"
if (str.indexOf('b') > 0) {//查找
str = str.substring(0, str.indexOf('b'))//截取
}
var str_array:List<String> = str.split('.')//分割,java會傳回String[]對象,kotlin則傳回List<String>對象
而且它的字元串對象本身就可以被看做是一個字元數組,可以直接用下标的形式或者get方法來擷取對應位置的字元,不像java的字元串對象要擷取某一位置的單個字元還要去調用subString(index, index+1);
關于字元串的拼接,kotlin設計的也是非常優秀,不再需要加号進行字元串的拼接(java的那種用加号拼接字元串在kotlin中也是可以使用的,因為它完整的相容java):
var str1:String = "123"
var str2:String = "密碼是:$str1"
var str3:String = "qwer${"$123"}$str1"//${""}即為轉義聲明,{}中的字元串可以按原樣打出
var str4:String = "qwer\$$str1"//如果隻需要轉義一個$字元,在$前加上反斜杠\即可
四.容器
kotlin中也有三種容器:Set集合、List隊列、Map映射,他們各自又有隻讀和可變兩種操作類型,普通的Set、List、Map對象都是隻讀的類型,而加上Mutable字首就為可變類型,即MutableSet、MutableList、MutableMap,隻有可變才能對容器進行增删改操作。這三種容器的公有方法:
isEmpty是否為空
isNotEmpty是否非空
clear清空容器
contains是否包含指定元素
iterator擷取疊代器
count擷取元素個數,或者用size屬性擷取
初始化:
var list1:List<Int> = listOf(1,2,3)
kotlin的容器允許在聲明時就進行初始指派,但在java中的容器就不可以,下面是六種容器的初始化方法
名稱 | 初始化方法 |
---|---|
隻讀集合Set | setOf |
可變集合MutableSet | mutableSetOf |
隻讀隊列List | listOf |
可變隊列MutableList | mutableListOf |
隻讀映射Map | mapOf |
可變映射MutableMap | mutableMapOf |
1.Set/MutableSet
特性:
- 元素不按順序排列,無法按下标進行通路
- 元素存在唯一性,相同元素會被覆寫
- MutableSet沒有修改元素的方法,要麼添加,要麼删除
三種周遊方式:
- for-in
val set1:MutableSet<Int> = mutableSetOf(1, 2, 3)
for(item in set1){
println("目前資料:$item")
}
- 疊代器
val set1:MutableSet<Int> = mutableSetOf(1, 2, 3)
val iterator1 = set1.iterator()
while(iterator1.hasNext()) {
val item = iterator1.next()
println("目前資料:$item")
}
- forEach
kotlin提供了即為精簡的一種周遊方式forEach方法,在編碼時forEach方法采用匿名方法的形式,内部用it變量來代替每個元素
val set1:MutableSet<Int> = mutableSetOf(1, 2, 3)
set1.forEach {
println("目前資料:$it")
}
2.List/MutableList
特性:
- 隊列可以通過get方法擷取指定位置的元素,也可以直接通過下标擷取指定位置元素
- MutableList的add方法預設添加新元素至隊列末尾,也可以添加到指定位置
- MutableList的set方法允許修改指定位置的元素
- MutableList的removeAt方法删除指定位置的元素
- 除了上述的三種周遊方式外,隊列還有一種按下标周遊的方式
val list1:MutableList<Int> = mutableListOf(1, 2, 3)
for (i in list1.indices) {//indices是下标數組,從0開始
println("目前資料:${list1[i]}")
}
3.Map/MutableMap
- 映射的containsKey方法判斷是否存在指定鍵名的元素
- MutableMap的put方法會先去查找是否存在該鍵名的元素,如果存在就将值替換掉,不存在就添加新元素
- MutableMap的remove方法是通過鍵名來删除元素
- mapOf/mutableMapOf方法初始化映射時有兩種方式:一個是“鍵名 to 鍵值”,另一種是Pair方法
var map1:Map<String, Int> = mapOf("數值1" to 12, "數值2" to 14, "數值3" to 42)
var map2:Map<String, Int> = mapOf(Pair("數值1", 12), Pair("數值2", 13), Pair("數值4", 41))
對于他的周遊來說,和set唯一的不同是他每一個item對象都包含了key和value兩個子屬性值,直接調用item.key和item.value就可以擷取到值了