val o1 = setOf(1, 2, 4) var o2 = setOf(2, 3, 6) /** * 并集 */ @Test funtestUnion() { val u1 = o1 + o2 val u2 = o1 union o2 var u3 = o1.union(o2)
println(u1 == u2) println(u1 == u3) println(u2) }
运行结果
1 2 3
true true [1, 2, 4, 3, 6]
其中o1+o2是对+进行了重载,查看其源码:
1 2 3 4 5 6
public operator fun <T> Set<T>.plus(elements: Iterable<T>): Set<T> { val result = LinkedHashSet<T>(mapCapacity(elements.collectionSizeOrNull()?.let { this.size + it } ?: this.size * 2)) result.addAll(this) result.addAll(elements) return result }
这个就是通过扩展函数对+(plus)进行了符号重载,使用更方便,好记
差集
差集就是元素存在于集合 A中而不存在于 B中。也可以理解为:A集合排除(A和 B 的交集),也是3 种方式:符号重载、中缀表达式、普通方法调用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
val o1 = setOf(1, 2, 4) var o2 = setOf(2, 3, 6) /** * 差集 */ @Test funtestSubtract() { val s1 = o1 - o2 val s2 = o1.subtract(o2) val s3 = o1 subtract o2 println(s1 == s2) println(s3 == s2) println(s3) println(s3) }