为何Kotlin的Set可添加重复元素?是我误解文档了吗?
为什么Kotlin的setOf传入重复元素却不报错?
Kotlin的Set确实不允许存在相等的元素,你并没有误解文档,问题出在对"重复"的判断逻辑和setOf的实现上:
关键细节:
- Set的"禁止重复"是指集合最终不会包含两个
equals方法返回true的元素,而不是限制你在创建时传入重复的参数。 - 当你调用
setOf(c, c)或setOf("3", "3")时,函数内部会自动做去重处理,最终生成的Set里只会保留一个元素。你可以通过打印集合大小验证:
var c = Card2.`2c` var cards3: Set<Card2> = setOf(c, c) println(cards3.size) // 结果是1 var s: Set<String> = setOf("3", "3") println(s.size) // 结果是1
- 编译器不会在编译阶段报错,因为元素是否重复需要依赖运行期的
equals逻辑判断,编译期无法提前确定。
内容的提问来源于stack exchange,提问作者Сергей Ружейников
相关产品推荐
相关产品推荐

