首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

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

  • 25-04-17 10:20
  • 3531
  • 8437
juejin.cn

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. 范围操作符(..、until、step)

  • 语法:

    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 { 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) { 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 中 == 和 === 的区别
注:本文转载自juejin.cn的QING618的文章"https://juejin.cn/post/7488251511437328420"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top