Kotlin集合中已有size属性,count()方法的作用是什么?
Kotlin集合中size属性与count()方法的区别
这是个很实用的问题!先直接给结论:不带参数的count()方法,在List、Array、Map这些集合类型里,底层实现确实就是直接返回size属性的值,就像你给出的示例一样:
val list = listOf(1, 2, 3) list.size // 返回3 list.count() // 同样返回3 val map = mapOf(1 to 1, 2 to 2, 3 to 3) map.size // 返回3 map.count() // 同样返回3 val array = arrayOf(1, 2, 3) array.size // 返回3 array.count() // 同样返回3
那为什么Kotlin还要提供这个看似重复的方法呢?核心原因是**count()有一个带谓词参数的重载版本**——这才是它存在的核心价值,用来快速统计满足特定条件的元素数量,比先过滤再取size更简洁高效。
举几个实际场景的例子:
1. 统计List中满足条件的元素
val numbers = listOf(1, 2, 3, 4, 5, 6) // 统计偶数的数量 val evenCount = numbers.count { it % 2 == 0 } // 返回3 // 如果用size的话需要多一步过滤,还会创建中间集合 val evenSize = numbers.filter { it % 2 == 0 }.size // 同样返回3,但效率稍低
2. 统计Map中符合条件的键值对
val userMap = mapOf(1 to "Alice", 2 to "Bob", 3 to "Charlie", 4 to "David") // 统计用户名长度大于4的键值对数量 val longNameCount = userMap.count { (_, name) -> name.length > 4 } // 返回2
总结
- 不带参数的
count()本质是为了API一致性,让你在不需要过滤时,也能使用和带参版本统一的方法调用风格; - 带参数的
count()才是核心功能,它遍历一次集合就完成计数,避免了创建中间集合的额外开销,比filter().size更高效。
内容的提问来源于stack exchange,提问作者Elye
相关产品推荐
相关产品推荐

