天天看點

Kotlin(2)資料類型Kotlin(二)資料類型

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就可以擷取到值了

OK,kotlin的資料類型常用的知識差不多就是這些,基本上都是在java的基礎上進行精簡,其本質并沒有什麼變化,使用起來并沒有什麼難度,多敲幾遍應該就可以記住。下一篇我們來說控制邏輯https://blog.csdn.net/qq_37159335/article/details/90765102