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閱讀 230,527評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,687評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,640評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,957評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,682評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,011評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,009評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,183評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,714評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,435評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,665評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,148評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,838評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,251評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,588評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,379評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,627評論 2 380

推薦閱讀更多精彩內容