<font face= 黑體>在 Kotlin 學習筆記以內置類型(1) 中咱們已經講了 Kotlin 內置類型中的基本類型、數組和區間,今天咱們來說 Kotlin 的集合框架和函數。java
<font face= 黑體>Kotlin 的集合有如下特色:git
<font face= 黑體>Kotlin 中的集合分爲可變與不可變,與 Java 的比較以下圖所示:github
Kotlin | Java | |
---|---|---|
不可變 List | List<T<T>> | List<T<T> |
可變 List | MutableList<T<T>> | List<T<T> |
不可變 Map | Map<K,V> | Map<K,V> |
可變 Map | MutableMap<K, V> | Map<K,V> |
不可變 Set | Set<T<T>> | Set<T<T>> |
可變 Set | MutableSet<T<T>> | Set<T<T>> |
Java:segmentfault
List<Integer> intList = new ArrayList<>();
Kotlin:數組
// List val intList: List<Int> = listOf(1, 2, 3, 4) val intList2: MutableList<Int> = mutableListOf(1, 2, 3, 4) // Map val map: Map<String, Any> = mapOf("name" to "zs", "age" to 20) val map2: Map<String, Any> = mutableMapOf("name" to "ls", "age" to 20)
Java:框架
List<String> stringList = new ArrayList<>(); // add for (int i = 0; i < 10; i++) { stringList.add("num: " + i); } // remove for (int i = 0; i < 10; i++) { stringList.remove("num: " + i); } // set stringList.set(5, "HelloWorld"); // get String valueAt5 = stringList.get(5);
Kotlin:函數
val stringList = ArrayList<String>() // add for (i in 0 .. 10){ // stringList += "num: $i" 運算符重載 stringList.add("num: $i") } // remove for (i in 0 .. 10){ // stringList -= "num: $i" 運算符重載 stringList.remove("num: $i") } // set stringList[5] = "HelloWorld" // get val valueAt5 = stringList[5]
Java:學習
HashMap<String, Integer> hashMap = new HashMap<>(); hashMap.put("Hello", 10); System.out.println(hashMap.get("Hello"));
Kotlin:spa
val hashMap = HashMap<String, Int>() hashMap["Hello"] = 10 println(hashMap["Hello"])
var mutableList: MutableList<Int> = mutableListOf(1, 2, 3, 4) // 使用 forEach mutableList.forEach { println("Mutable List Elements:$it") } // 使用 for for (value in mutableList) { print("value:$value") }
val pair1 = "Hello" to "Kotlin" val pair2 = Pair("Hello", "Kotlin") val first = pair.first val second = pair.second val (x, y) = pair
val triple = Triple("x", 2, 3.0) val first = triple.first val second = triple.second val third = triple.third val (x, y, z) = triple
<font face= 黑體>Kotlin 中的函數的特色以下:3d
<font face= 黑體>Kotlin 函數的學習路線圖以下所示,今天咱們只學習 Kotlin 函數的基本概念。
<font face= 黑體>Kotlin 中函數的定義以下所示,Unit 等價於 Java 中的 Void,若是函數的返回值爲 Unit 時,可省略。
<font face= 黑體>例子1:如下這個函數的類型是 () -> Unit 。
fun foo() {} //函數類型是:() -> Unit
<font face= 黑體>例子2:如下這個函數的類型是 (Int) -> String 。
//函數類型是:(Int) -> String fun foo(p0: Int): String { return "" }
<font face= 黑體>例子3:如下這個函數的類型是 Foo.(String, Long) -> Any ,也能夠寫做 (Foo, String, Long) -> Any 。
// Foo.(String, Long) -> Any//第一種寫法 // (Foo, String, Long) -> Any//第二種寫法 class Foo { fun bar(p0: String, p1: Long): Any { return 0 } }
<font face= 黑體>函數的引用相似 C 語言中的函數指針,可用於函數傳遞。
<font face= 黑體>例子1:如下這兩個函數的引用都是 ::foo 。
fun foo() {} //函數引用是:::foo fun foo(p0: Int): String {...} // 這個函數的引用也是 ::foo
<font face= 黑體>例子2:如下這個函數的引用是 Foo::bar 。
// 函數引用表示爲 Foo::bar class Foo { fun bar(p0: String, p1: Long): Any { return 0 } }
<font face= 黑體>知道了函數的類型和函數的引用以後,咱們就能夠定義變量來接收函數,能夠類比咱們定義普通變量的形式。
val name: String = "China"
<font face= 黑體>例子1:定義變量 f
val f: ()->Unit = ::foo // 能夠簡化成 val f = ::foo
<font face= 黑體>例子2:定義變量 g
val g: (Int)->String = ::foo // 能夠簡化成 val g = ::foo
<font face= 黑體>例子2:定義變量 h
val h: (Foo, String, Long)->Any = Foo::bar // 能夠簡化成 val h = Foo::bar
<font face= 黑體>Java 中也是支持變長參數的,具體寫法以下所示:
public static void main(String... args) { // String... args 定義變長參數 System.out.println(Arrays.toString(args)); }
<font face= 黑體>Kotlin 中變長參數是經過 vararg 來表示。
// 能夠接受多個 Int fun multiParameters(vararg ints: Int) { println(ints.contentToString()) } // 調用上述接收變長參數的方法 fun main() { multiParameters(1, 2, 3, 4) }
<font face= 黑體>打印結果以下所示:
<font face= 黑體>變長參數是傳遞多個不肯定個數的參數,可是多返回值返回的個數是肯定的,確切的說多返回值就是利用咱們前面說到的 Pair 和 Triple 來實現僞多返回值。
fun multiReturnValues(): Triple<Int, Long, Double> { return Triple(1, 3L, 4.0) } // 僞多返回值 val (a, b, c) = multiReturnValues()
// 函數定義 fun defaultParameter(x: Int, y: String, z: Long) { TODO() } // 函數調用 defaultParameter(5, "Hello", 0L)
<font face= 黑體>在函數定義中可使用默認參數,上述的代碼就能夠變成下面這樣:
// 函數定義 聲明 z 的默認值是 0L fun defaultParameter(x: Int, y: String, z: Long = 0L) { TODO() } // 函數調用 不傳參,使用默認值 defaultParameter(5, "Hello")
<font face= 黑體>在上述默認參數代碼中,若是 x 也設置了默認參數,這時候不傳 x 和 z,只傳一個 y,就必需要利用具名參數來傳遞,不然編譯器沒法判斷傳的值應該賦給誰。
// 函數定義 聲明 x 的默認值是 5, z 的默認值是 0L fun defaultParameter(x: Int = 5, y: String, z: Long = 0L) { TODO() } // 函數調用 形參 y 來顯示接收參數 defaultParameter(y = "Hello")
<font face= 黑體>函數在 Kotlin 中算是一個比較難的知識點了,須要不斷的去應用才能真正的掌握,今天咱們講的函數仍是一些基礎。
<font face= 黑體>本篇博客主要講了 Kotlin 內置類型中的 集合框架 和 函數。這樣 Kotlin 的內置類型算是講的差不都了,下一篇咱們講 Kotlin 中的 類。
源碼已上傳至 github,有須要能夠直接下載。