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 中 == 和 === 的区别
相关推荐
每次的天空6 小时前
Android学习总结之算法篇四(字符串)
android·学习·算法
x-cmd7 小时前
[250331] Paozhu 发布 1.9.0:C++ Web 框架,比肩脚本语言 | DeaDBeeF 播放器发布 1.10.0
android·linux·开发语言·c++·web·音乐播放器·脚本语言
高林雨露8 小时前
Java 与 Kotlin 对比示例学习(三)
java·kotlin
lc9991028 小时前
基于kotlin native的C与kotlin互相调用
开发语言·kotlin
tangweiguo0305198710 小时前
Android BottomNavigationView 完全自定义指南:图标、文字颜色与选中状态
android
遥不可及zzz11 小时前
Android 应用程序包的 adb 命令
android·adb
无知的前端11 小时前
Flutter 一文精通Isolate,使用场景以及示例
android·flutter·性能优化
_一条咸鱼_11 小时前
Android Compose 入门之字符串与本地化深入剖析(五十三)
android
ModestCoder_12 小时前
将一个新的机器人模型导入最新版isaacLab进行训练(以unitree H1_2为例)
android·java·机器人
robin_suli13 小时前
Spring事务的传播机制
android·java·spring