Kotlin 學習筆記以內置類型(2)

1、前言

<font face= 黑體>在 Kotlin 學習筆記以內置類型(1) 中咱們已經講了 Kotlin 內置類型中的基本類型數組和區間,今天咱們來說 Kotlin 的集合框架函數java

2、Kotlin 的集合框架

<font face= 黑體>Kotlin 的集合有如下特色:git

  • <font face= 黑體>增長了 "不可變" 集合框架的接口;
  • <font face= 黑體>複用了 Java API 的全部實現類型;
  • <font face= 黑體>提供了豐富易用的方法,例如 forEach/map/flatMap。

2.一、與 Java 對比

<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>>

2.二、集合框架的建立

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)

2.三、集合框架的讀寫

2.3.一、List 集合

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]

2.3.二、Map 集合

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"])

2.四、集合框架的遍歷

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")
}

2.五、Pair(二元祖對象)

val pair1 = "Hello" to "Kotlin"
val pair2 = Pair("Hello", "Kotlin")
val first = pair.first
val second = pair.second
val (x, y) = pair

2.六、Triple(三元祖對象)

val triple = Triple("x", 2, 3.0)
val first = triple.first
val second = triple.second
val third = triple.third
val (x, y, z) = triple

2.七、Kotlin 集合框架小結

集合框架小結

3、Kotlin 的函數

<font face= 黑體>Kotlin 中的函數的特色以下:3d

  • <font face= 黑體>有本身的類型,在 Kotlin 中很是重要;
  • <font face= 黑體>能夠賦值、傳遞,並在合適的條件下調用。

3.一、Kotlin 函數的學習路線

<font face= 黑體>Kotlin 函數的學習路線圖以下所示,今天咱們只學習 Kotlin 函數的基本概念。
函數學習路線

3.二、函數的定義

<font face= 黑體>Kotlin 中函數的定義以下所示,Unit 等價於 Java 中的 Void,若是函數的返回值爲 Unit 時,可省略。
函數的定義

3.三、函數和方法的區別

  • <font face= 黑體>方法能夠認爲是函數的一種特殊類型;
  • <font face= 黑體>從形式看,在類裏面的函數通常稱爲方法

3.四、函數的類型

<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
    }
}

3.五、函數的引用

<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
    }
}

3.六、定義變量來接收函數

<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

3.七、變長參數

<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= 黑體>打印結果以下所示:
打印結果

3.八、多返回值

<font face= 黑體>變長參數是傳遞多個不肯定個數的參數,可是多返回值返回的個數是肯定的,確切的說多返回值就是利用咱們前面說到的 PairTriple 來實現僞多返回值。

fun multiReturnValues(): Triple<Int, Long, Double> {
    return Triple(1, 3L, 4.0)
}

// 僞多返回值
val (a, b, c) = multiReturnValues()

3.九、默認參數

// 函數定義
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")

3.十、具名參數

<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")

3.十一、Kotlin 函數小結

<font face= 黑體>函數在 Kotlin 中算是一個比較難的知識點了,須要不斷的去應用才能真正的掌握,今天咱們講的函數仍是一些基礎。

Kotlin 函數小結

4、小結

<font face= 黑體>本篇博客主要講了 Kotlin 內置類型中的 集合框架函數。這樣 Kotlin 的內置類型算是講的差不都了,下一篇咱們講 Kotlin 中的

5、源碼

源碼已上傳至 github,有須要能夠直接下載。

相關文章
相關標籤/搜索