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 中 == 和 === 的区别
相关推荐
paid槮32 分钟前
MySql基础:数据类型
android·mysql·adb
用户2018792831672 小时前
AMS和app通信的小秘密
android
用户2018792831672 小时前
ThreadPoolExecutor之市场雇工的故事
android
诺诺Okami2 小时前
Android Framework-Launcher-InvariantDeviceProfile
android
Antonio9153 小时前
【音视频】Android NDK 与.so库适配
android·音视频
sun00770012 小时前
android ndk编译valgrind
android
AI视觉网奇13 小时前
android studio 断点无效
android·ide·android studio
jiaxi的天空13 小时前
android studio gradle 访问不了
android·ide·android studio
No Silver Bullet14 小时前
android组包时会把从maven私服获取的包下载到本地吗
android
catchadmin14 小时前
PHP serialize 序列化完全指南
android·开发语言·php