Kotlin 操作符与集合/数组方法详解——新手指南

Kotlin 提供丰富的操作符和扩展方法,简化集合操作、范围判断、内容比较等场景的代码。以下是核心操作符和方法的详细说明及示例:

一、基础操作符

1. !=(非等于)

  • 作用 :判断两个对象是否不相等(基于 equals() 方法)。

  • 示例代码

    kotlin 复制代码
    val a = "Kotlin"
    val b = "Java"
    println(a != b) // true(调用 a.equals(b) 的否定)

2. in!in(成员操作符)

  • 作用:判断元素是否在集合或范围内存在。

  • 示例代码

    kotlin 复制代码
    val list = listOf(1, 2, 3)
    val range = 1..10
    
    println(2 in list)    // true
    println(5 !in range)  // false

3. 范围操作符(..untilstep

  • 语法

    kotlin 复制代码
    1..10       // 闭区间 [1, 10]
    1 until 10  // 左闭右开 [1, 10)
    10 downTo 1 step 2 // 步长为2的倒序区间
  • 示例代码

    kotlin 复制代码
    for (i in 1..5 step 2) {
        print("$i ") // 输出:1 3 5 
    }

二、比较操作符

1. compareTo(比较大小)

  • 作用 :实现 Comparable 接口的类可定义比较逻辑。

  • 示例代码

    kotlin 复制代码
    class Person(val age: Int) : Comparable<Person> {
        override fun compareTo(other: Person) = this.age - other.age
    }
    
    val p1 = Person(25)
    val p2 = Person(30)
    println(p1 < p2)  // true(等价于 p1.compareTo(p2) < 0)

2. equals(逻辑相等)

  • 作用:判断对象内容是否相等(默认基于引用,数据类自动生成基于属性的实现)。

  • 示例代码

    kotlin 复制代码
    data class User(val name: String, val id: Int)
    val u1 = User("Alice", 1)
    val u2 = User("Alice", 1)
    println(u1 == u2) // true(数据类自动生成 equals)

3. contentEquals(内容相等)

  • 作用:比较数组或集合的内容是否相同。

  • 示例代码

    kotlin 复制代码
    val arr1 = arrayOf(1, 2, 3)
    val arr2 = arrayOf(1, 2, 3)
    println(arr1.contentEquals(arr2)) // true(内容相同)
    println(arr1 == arr2)             // false(引用不同)

三、集合操作

1. sort(排序)

  • 作用 :对可变集合(如 MutableList)进行原地排序。

  • 示例代码

    kotlin 复制代码
    val numbers = mutableListOf(3, 1, 4, 2)
    numbers.sort()                    // 自然排序
    numbers.sortDescending()          // 逆序排序
    numbers.sortBy { it % 3 }         // 自定义排序

2. binarySearch(二分查找)

  • 前提:集合必须已排序。

  • 示例代码

    kotlin 复制代码
    val sortedList = listOf(10, 20, 30, 40, 50)
    val index = sortedList.binarySearch(30) // 返回索引 2

四、数组操作

1. sort(数组排序)

  • 示例代码

    kotlin 复制代码
    val arr = arrayOf(5, 3, 1, 4, 2)
    arr.sort()                          // 原地排序:[1, 2, 3, 4, 5]
    val sortedArr = arr.sortedArray()   // 生成新数组

2. 其他数组方法

  • 内容比较

    kotlin 复制代码
    val a1 = intArrayOf(1, 2, 3)
    val a2 = intArrayOf(1, 2, 3)
    println(a1.contentEquals(a2))       // true
  • 填充与复制

    kotlin 复制代码
    val arr = IntArray(5) { it }
    arr.fill(0)                         // 所有元素置0
    val copy = arr.copyOf()             // 深拷贝

五、操作符重载与自定义行为

1. 自定义 in 操作符

  • 实现 :在类中定义 contains 方法。

    kotlin 复制代码
    class Week(private val days: List<String>) {
        operator fun contains(day: String) = day in days
    }
    val week = Week(listOf("Mon", "Tue", "Wed"))
    println("Tue" in week) // true

2. 自定义比较逻辑

  • 覆写 equals

    kotlin 复制代码
    class Product(val name: String) {
        override fun equals(other: Any?): Boolean {
            return (other as? Product)?.name?.startsWith("A") ?: false
        }
    }
    val p1 = Product("Apple")
    val p2 = Product("Banana")
    println(p1 == p2) // false(仅比较名称是否以 A 开头)

六、总结对比

操作符/方法 核心作用 适用场景
!= 非相等判断(基于 equals() 所有对象比较
in / !in 成员存在性检查 集合、范围、自定义类
.. / until 定义数值范围 循环、区间判断
compareTo 对象大小比较 排序、自定义顺序
contentEquals 数组/集合内容比较 数组或集合的深比较
sort 原地排序 可变集合/数组
binarySearch 快速查找元素位置 已排序集合

通过合理使用这些操作符和方法,可以显著提升 Kotlin 代码的简洁性和可读性! 🚀

更多分享

  1. 一文吃透Kotlin中冷流(Clod Flow)和热流(Hot Flow)
  2. 一文带你吃透Kotlin协程的launch()和async()的区别
  3. Kotlin 委托与扩展函数------新手入门
  4. Kotlin 作用域函数(let、run、with、apply、also)的使用指南
  5. 一文带你吃透Kotlin中 lateinit 和 by lazy 的区别和用法
  6. Kotlin 扩展方法(Extension Functions)使用详解
  7. Kotlin 中 == 和 === 的区别
相关推荐
IT乐手22 分钟前
Android 写本地日志工具类
android·java
非典型Android程序员1 小时前
Launcher学习总结
android
Coffeeee2 小时前
Android功耗优化,哪些代码会让你的机子发热又耗电
android·架构·kotlin
Android打工仔2 小时前
Kotlin 编译器是如何把 suspend 函数变成状态机的?
kotlin
Android打工仔2 小时前
一个 suspend 函数,为什么会变成一个普通函数?
kotlin
xianrenli383 小时前
Android14自动时区更新
android·学习·framework·aosp14·自动时区
心中有国也有家3 小时前
AtomGit Flutter 鸿蒙客户端:零外部资源的应用打包策略
android·javascript·flutter·华为·harmonyos
恋猫de小郭3 小时前
Fluter 共享内存多线程正在落地,IsolateGroupBound 来了
android·前端·flutter
三少爷的鞋4 小时前
Kotlin 协程的七重境界:从 launch(IO) 到执行模型设计
android
-SOLO-14 小时前
Android Event 日志完全指南
android