Android Kotlin(3)之《基本類型與集合》

Android Kotlin第三篇,這篇我們一起來了解下Kotlin基礎(chǔ)類型與集合,也許我有的地方?jīng)]有寫好型宙,也歡迎大家提出問題,糾正問題

一伦吠、數(shù)字類型

Kotlin對(duì)數(shù)字處理與java差不多妆兑,Kotlin支持?jǐn)?shù)字類型如下:

    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支持十進(jìn)制魂拦、十六進(jìn)制以及二進(jìn)制,目前還不支持八進(jìn)制

    val tenType : Int = 10 //支持十進(jìn)制搁嗓,默認(rèn)是十進(jìn)制
    val sixteenType : Byte = 0x22 //支持十六進(jìn)制,0x開頭標(biāo)示十六進(jìn)制
    val twoType : Int = 0b00000010 //支持二進(jìn)制,0b開頭表示二進(jìn)制

與java不同之處
1芯勘、數(shù)字類型支持字面值中的下劃線,這樣讓長(zhǎng)數(shù)字常量更已讀腺逛,例如:

    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數(shù)據(jù)類型轉(zhuǎn)化與java不同

      val a: Int? = 1
//    val b: Long? = a//這樣隱式轉(zhuǎn)換有問題,不能編譯
//    val c: Long? = (Long)a//像java一樣強(qiáng)轉(zhuǎn)也不行棍矛,不能編譯

Kotlin提供了更加強(qiáng)大的轉(zhuǎn)化功能
每個(gè)數(shù)字類型都支持一下的轉(zhuǎn)化:
toByte(): Byte
toShort(): Short
toInt(): Int
toLong(): Long
toFloat(): Float
toDouble(): Double
toChar(): Char

    val d: Long? = a?.toLong()
    //算術(shù)運(yùn)算會(huì)有重載做適當(dāng)轉(zhuǎn)換
    val l = 1L + 3 // Long + Int => Long

當(dāng)然接下來的其他類型大部分也都支持以上轉(zhuǎn)化安疗,例如:字符等
3、位運(yùn)算

//    這是完整的位運(yùn)算列表(只用于 Int 和 Long):
//    shl(bits) – 有符號(hào)左移 (Java 的 <<)
//    shr(bits) – 有符號(hào)右移 (Java 的 >>)
//    ushr(bits) – 無符號(hào)右移 (Java 的 >>>)
//    and(bits) – 位與
//    or(bits) – 位或
//    xor(bits) – 位異或
//    inv() – 位非
    val x = (1 shl 2) and 0x000FF000

二够委、字符類型(Char)

字符類型,單引號(hào)括起來且只能一個(gè)字符茂契。
特殊字符可以用反斜杠轉(zhuǎn)義。 支持這幾個(gè)轉(zhuǎn)義序列:\t慨绳、 \b、\n真竖、\r脐雪、'、"恢共、\ 和 $

    val char1 : Char = 'a'
    val char2 : Char = '1'
    val cInt : Int = char2.toInt()//字符類型轉(zhuǎn)Int
    //字符類型轉(zhuǎn)Int方法
    fun CharToInt(c: Char): Int {
        if (c !in '0'..'9')
            throw IllegalArgumentException("Out of range")
        return c.toInt() - '0'.toInt() // 顯式轉(zhuǎn)換為數(shù)字
    }

三战秋、布爾類型()

與java差不多,唯一區(qū)別就是讨韭,Kotlin不只是true或false,還支持null脂信,例如:

    val bool1 : Boolean = true
    val bool2 : Boolean? = null//加上?就可以對(duì)布爾類型賦值null
    fun test4() : String{
        return bool2.toString()//就算調(diào)用null透硝,輸出打印狰闪,也不會(huì)報(bào)錯(cuò),這就是Kotlin空安全強(qiáng)大之處
    }

四濒生、集合埋泵、數(shù)組類型

與大多數(shù)語(yǔ)言不同,Kotlin 區(qū)分可變集合和不可變集合(lists罪治、sets丽声、maps 等)。精確控制什么時(shí)候集合可編輯有助于消除 bug 和設(shè)計(jì)良好的 API觉义。

Kotlin 的 List<out T> 類型是一個(gè)提供只讀操作如 size雁社、get等的接口。和 Java 類似晒骇,它繼承自 Collection<T> 進(jìn)而繼承自 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 標(biāo)準(zhǔn)庫(kù)提供了arrayOf()創(chuàng)建數(shù)組屠缭, **ArrayOf創(chuàng)建特定類型數(shù)組

    val array = arrayOf(1,2,3)
    //和Java不一樣,Kotlin 的數(shù)組是容器類
    // 提供了 ByteArray, CharArray, ShortArray, IntArray, LongArray, BooleanArray, FloatArray, and DoubleArray崭参。
    val intArray = intArrayOf(1,2)

public inline constructor(size: Int, init: (Int) -> T)
創(chuàng)建一個(gè)具有指定[size]的新數(shù)組呵曹,其中每個(gè)元素通過調(diào)用指定的值來計(jì)算。函數(shù)的作用是:返回給定索引的數(shù)組元素何暮。例如:

    val array1 = Array(10, { k -> k * k })//這里k代表元素的索引位置
//  return array1.get(2).toString()//輸出4奄喂,因?yàn)樗饕?,輸出:k*k = 2*2 = 4
    val array2 = Array(10,{k -> "位置:"+(k+1) })
//  return array2.get(5).toString() //輸出"位置:6"海洼,因?yàn)樗饕?跨新,輸出:"位置:"+(k+1) = "位置:"+(6+1) = 位置:6
    val emptyArray = emptyArray<Long>()

當(dāng)然你也創(chuàng)建對(duì)象數(shù)組

   class Student(val name : String?){
    }
   //當(dāng)然你也創(chuàng)建對(duì)象數(shù)組
   val studentArray = Array<Student>(10,{k -> Student("學(xué)生編號(hào):"+k)})
// return studentArray.get(6).name.toString()
   studentArray[6] = Student("張三")
   return studentArray.get(6).name.toString()

2、Lists

List是有序容器坏逢,Kotlin 標(biāo)準(zhǔn)庫(kù)通過listOf()創(chuàng)建list
你可以這樣申明

        val list1 = listOf<Int>()

當(dāng)然也可以這樣域帐,list1與list2意思一樣

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

當(dāng)然你也可以付初始默認(rèn)值,也可以不指定類型

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

如果你想對(duì)list2進(jìn)行添加或者修改時(shí)是整,就不行了肖揣,因?yàn)長(zhǎng)ist<T>只能讀,這時(shí)候你需要聲明個(gè)可以操作的屬性

        val list4 : MutableList<Any> = list3.toMutableList()//這里將List轉(zhuǎn)換出可以編輯的
        list4.add("4")
//        list4.set(0,10)
//        return list4.toString()//輸出:[1, 2, 3, 4]
//        return list3.toString()//輸出:[1, 2, 3]

對(duì)list4操作不會(huì)影響list3浮入,list4相當(dāng)于復(fù)制出來的

//        return (list4.first() == 1).toString()//當(dāng)然也有l(wèi)ist4.last()

當(dāng)然也可以按一定條件篩選

//        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創(chuàng)建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是沒有重復(fù)項(xiàng)的容器彤断, Kotlin提供setOf創(chuàng)建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 ""
    }

五、字符串類型

支持這幾個(gè)轉(zhuǎn)義序列:\t易迹、 \b宰衙、\n、\r睹欲、'菩浙、"、\ 和 $

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

字符串模板表達(dá)式
字符串可以包含模板表達(dá)式 句伶,即一些小段代碼劲蜻,會(huì)求值并把結(jié)果合并到字符串中。 模板表達(dá)式以美元符($)開頭考余,由一個(gè)簡(jiǎn)單的名字構(gòu)成:

        val string3 = "a = $string1"
//        return string3
        val string4 = "$string3.length is ${string3.length}"
        return string4 //輸出a = 1.length is 5
``
到此先嬉,基本類型就介紹完了,謝謝大家的觀賞楚堤。最近更新速度有點(diǎn)慢疫蔓,給自己加油含懊,加快速度更新

[源碼下載](https://github.com/xiaoqiang008/AndroidKotlin)這里源碼會(huì)隨著后面發(fā)布的Kotlin逐漸完善
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市衅胀,隨后出現(xiàn)的幾起案子岔乔,更是在濱河造成了極大的恐慌,老刑警劉巖滚躯,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件雏门,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡掸掏,警方通過查閱死者的電腦和手機(jī)茁影,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來丧凤,“玉大人募闲,你說我怎么就攤上這事≡复” “怎么了浩螺?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)仍侥。 經(jīng)常有香客問我年扩,道長(zhǎng),這世上最難降的妖魔是什么访圃? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮相嵌,結(jié)果婚禮上腿时,老公的妹妹穿的比我還像新娘。我一直安慰自己饭宾,他們只是感情好批糟,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著看铆,像睡著了一般徽鼎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上弹惦,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天否淤,我揣著相機(jī)與錄音,去河邊找鬼棠隐。 笑死石抡,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的助泽。 我是一名探鬼主播啰扛,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼嚎京,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了隐解?” 一聲冷哼從身側(cè)響起鞍帝,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎煞茫,沒想到半個(gè)月后帕涌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡溜嗜,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年宵膨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片炸宵。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡辟躏,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出土全,到底是詐尸還是另有隱情捎琐,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布裹匙,位于F島的核電站瑞凑,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏概页。R本人自食惡果不足惜籽御,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望惰匙。 院中可真熱鬧技掏,春花似錦、人聲如沸项鬼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)绘盟。三九已至鸠真,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間龄毡,已是汗流浹背吠卷。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留沦零,地道東北人撤嫩。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蠢终,于是被迫代替她去往敵國(guó)和親序攘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子茴她,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容