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 中 == 和 === 的区别
相关推荐
SharpCJ6 小时前
Android 开发者为什么必须掌握 AI 能力?端侧视角下的技术变革
android·ai·aigc
_李小白6 小时前
【OSG学习笔记】Day 38: TextureVisitor(纹理访问器)
android·笔记·学习
JJay.6 小时前
Kotlin 高阶函数学习指南
android·开发语言·kotlin
android_cai_niao6 小时前
kotlin中的when
kotlin·when
渔舟小调6 小时前
后端框架选型:为什么选Kotlin + Spring Boot
kotlin·idea
jinanwuhuaguo6 小时前
截止到4月8日,OpenClaw 2026年4月更新深度解读剖析:从“能力回归”到“信任内建”的范式跃迁
android·开发语言·人工智能·深度学习·kotlin
JJay.7 小时前
Android Kotlin 协程使用指南
android·开发语言·kotlin
BLUcoding8 小时前
Android 布局介绍
android
summerkissyou19878 小时前
android-蓝牙-状态和协议值总结及监听例子
android·蓝牙
徒 花8 小时前
数据库知识复习05
android·数据库