美文网首页
Kotlin集合

Kotlin集合

作者: bruce1990 | 来源:发表于2020-04-11 11:18 被阅读0次

List 相关操作

按索引取元素

val numbers = listOf(1, 2, 3, 4)
println(numbers.get(0))
println(numbers[0])
//numbers.get(5)                         // exception!
println(numbers.getOrNull(5))             // null
println(numbers.getOrElse(5, {it}))        // 5

取列表的一部分

fun main() {
    val numbers = (0..13).toList()
    println(numbers.subList(3, 6))
}

查找元素位置

1.线性查找

val numbers = listOf(1, 2, 3, 4, 2, 5)
println(numbers.indexOf(2))
println(numbers.lastIndexOf(2))


    val numbers = mutableListOf(1, 2, 3, 4)
    println(numbers.indexOfFirst { it > 2})
    println(numbers.indexOfLast { it % 2 == 1})

2.在有序列表中二分查找
要搜索排序列表中的元素,请调用将该值作为参数传递的binarySearch()函数。 如果存在这样的元素,则函数返回其索引; 否则,它返回(-insertionPoint-1),其中insertingPoint是应插入此元素的索引,以便列表保持排序。 如果具有给定值的元素不止一个,则搜索可以返回其任何索引。

val numbers = mutableListOf("one", "two", "three", "four")
numbers.sort()
println(numbers)
println(numbers.binarySearch("two"))  // 3
println(numbers.binarySearch("z")) // -5
println(numbers.binarySearch("two", 0, 2))  // -3

Comparator 二分搜索

data class Product(val name: String, val price: Double)

fun main() {
    val productList = listOf(
        Product("WebStorm", 49.0),
        Product("AppCode", 99.0),
        Product("DotTrace", 129.0),
        Product("ReSharper", 149.0))

    println(productList.binarySearch(Product("AppCode", 99.0), compareBy<Product> { it.price }.thenBy { it.name }))
}

比较函数二分搜索

data class Product(val name: String, val price: Double)

fun priceComparison(product: Product, price: Double) = sign(product.price - price).toInt()

fun main() {
    val productList = listOf(
        Product("WebStorm", 49.0),
        Product("AppCode", 99.0),
        Product("DotTrace", 129.0),
        Product("ReSharper", 149.0))

    println(productList.binarySearch { priceComparison(it, 99.0) })
}

List 写操作

添加

val numbers = mutableListOf("one", "five", "six")
numbers.add(1, "two")
numbers.addAll(2, listOf("three", "four"))
println(numbers)

更新

val numbers = mutableListOf("one", "five", "three")
numbers[1] =  "two"
println(numbers)

删除

val numbers = mutableListOf(1, 2, 3, 4, 3)    
numbers.removeAt(1)
println(numbers)

排序

val numbers = mutableListOf("one", "two", "three", "four")

numbers.sort()
println("Sort into ascending: $numbers")
numbers.sortDescending()
println("Sort into descending: $numbers")

numbers.sortBy { it.length }
println("Sort into ascending by length: $numbers")
numbers.sortByDescending { it.last() }
println("Sort into descending by the last letter: $numbers")

numbers.sortWith(compareBy<String> { it.length }.thenBy { it })
println("Sort by Comparator: $numbers")

numbers.shuffle()
println("Shuffle: $numbers")

numbers.reverse()
println("Reverse: $numbers")

set 相关操作

    val numbers = setOf("one", "two", "three")

    println(numbers.elementAt(1))//读取指定下标元素

    println(numbers union setOf("four", "five"))//合并集合
    println(setOf("four", "five") union numbers)//合并集合

    println(numbers intersect setOf("two", "one"))//取交集
    println(numbers subtract setOf("three", "four"))//找除交集以外的
    println(numbers subtract setOf("four", "three")) // same output

Map 相关操作

取键与值

    val numbersMap = mapOf("one" to 1, "two" to 2, "three" to 3)
    println(numbersMap.get("one"))
    println(numbersMap["one"])
    println(numbersMap.getOrDefault("four", 10))
    println(numbersMap["five"])               // null
    println(numbersMap.getOrElse("five", { 5 }))               // null

过滤

    val numbersMap = mapOf("key1" to 1, "key2" to 2, "key3" to 3, "key11" to 11)
    val filteredMap = numbersMap.filter { (key, value) -> key.endsWith("1")/* && value > 10*/}
    println(filteredMap)

还能根据key或者value来过滤
    val numbersMap = mapOf("key1" to 1, "key2" to 2, "key3" to 3, "key11" to 11)
    val filteredKeysMap = numbersMap.filterKeys { it.endsWith("1") }
    val filteredValuesMap = numbersMap.filterValues { it < 10 }
    println(filteredKeysMap)
    println(filteredValuesMap)

plus 与 minus 操作

plus

fun main() {
    val numbersMap = mapOf("one" to 1, "two" to 2, "three" to 3)
    println(numbersMap + Pair("four", 4))
    println(numbersMap + Pair("one", 10))//注意这里要用Pair
    println(numbersMap + mapOf("five" to 5, "one" to 11))
}

minus

    val numbersMap = mapOf("one" to 1, "two" to 2, "three" to 3)
    println(numbersMap - "one")
    println(numbersMap - listOf("two", "four"))

Map 写操作

添加与更新条目(如果已存在就会更新)

    val numbersMap = mutableMapOf("one" to 1, "two" to 2)
    numbersMap.put("three", 3)
    println(numbersMap)

val numbersMap = mutableMapOf("one" to 1, "two" to 2, "three" to 3)
numbersMap.putAll(setOf("four" to 4, "five" to 5))
println(numbersMap)

val numbersMap = mutableMapOf("one" to 1, "two" to 2)
val previousValue = numbersMap.put("one", 11)
println("value associated with 'one', before: $previousValue, after: ${numbersMap["one"]}")
println(numbersMap)

删除条目
要从可变映射中删除条目,请使用remove()函数。 调用remove()时,您可以传递键或整个键值对。 如果同时指定键和值,则仅当其值与第二个参数匹配时,才会删除带有此键的元素。

val numbersMap = mutableMapOf("one" to 1, "two" to 2, "three" to 3)
numbersMap.remove("one")
println(numbersMap)
numbersMap.remove("three", 4)            //doesn't remove anything
println(numbersMap)

您还可以通过键或值从可变映射中删除条目。 为此,请在地图的键或提供键或条目值的值上调用remove()。 在值上调用时,remove()仅删除具有给定值的第一个条目。

fun main() {
    val numbersMap = mutableMapOf("one" to 1, "two" to 2, "three" to 3, "threeAgain" to 3)
    numbersMap.keys.remove("one")
    println(numbersMap)
    numbersMap.values.remove(3)
    println(numbersMap)
}

使用-=符号

    val numbersMap = mutableMapOf("one" to 1, "two" to 2, "three" to 3)
    numbersMap -= "two"
    println(numbersMap)
    numbersMap -= "five"             //doesn't remove anything
    println(numbersMap)

相关文章

网友评论

      本文标题:Kotlin集合

      本文链接:https://www.haomeiwen.com/subject/jznzictx.html