Kotlin Set
介面是一個通用的無序元素集合,Set
介面不支援重複元素。 該介面本質上是不可變的,它的方法支援集合的唯讀功能。
Set
介面使用setOf()
函式建立包含元素列表的Set
介面物件列表。
interface Set<out E> : Collection<E> (source)
屬性 | 描述 |
---|---|
abstract val size: Int |
它返回集合的大小。 |
Kotlin Set
介面有幾個功能, 它的一些函式如下列表。
屬性 | 描述 |
---|---|
abstract fun contains(element: E): Boolean |
它檢查此集合中是否存在提及元素。 如果它包含element ,則返回true ,否則返回false 。 |
abstract fun containsAll(elements: Collection<E>): Boolean |
它檢查此集合中是否存在指定集合的所有提及元素。 如果它包含element ,則返回true ,否則返回false 。 |
abstract fun isEmpty(): Boolean |
如果集合為空(不包含元素),則返回true ,否則返回false 。 |
abstract fun iterator(): Iterator<E> |
它返回set 物件元素的疊代器。 |
fun <T> Iterable<T>.all(predicate: (T) -> Boolean): Boolean |
如果所有元素與給定謂詞匹配,則返回true 。 |
fun <T> Iterable<T>.any(): Boolean |
如果集合包含至少一個元素,則返回true 。 |
fun <T> Iterable<T>.count(predicate: (T) -> Boolean): Int |
它返回與給定謂詞匹配的元素總數。 |
fun <T> Iterable<T>.distinct(): List<T> |
它返回一個列表,只包含給定集合中的不同元素。 |
fun <T> Iterable<T>.drop(n: Int): List<T> |
它返回一個列表,其中包含除前n 個元素之外的所有元素。 |
fun <T> Iterable<T>.elementAtOrElse(index: Int, defaultValue: (Int) -> T): T |
如果索引在當前集合中超出範圍,它將返回給定索引處的元素或呼叫defaultValue 函式的結果。 |
fun <T> Iterable<T>.filter(predicate: (T) -> Boolean): List<T> |
它返回一個列表,其中只包含與給定謂詞匹配的元素。 |
fun <T> Iterable<T>.filterIndexed(predicate: (index: Int, T) -> Boolean): List<T> |
它返回一個列表,其中只包含與給定謂詞匹配的元素。 |
fun <T> Iterable<T>.filterNot(predicate: (T) -> Boolean): List<T> |
它返回一個列表,其中只包含那些與給定謂詞不匹配的元素。 |
fun <T> Iterable<T>.find(predicate: (T) -> Boolean): T? |
它返回與給定謂詞匹配的第一個元素,如果沒有找到這樣的元素,則返回null 。 |
fun <T> Iterable<T>.findLast(predicate: (T) -> Boolean): T? |
它返回與給定謂詞匹配的最後一個元素,如果沒有找到這樣的元素,則返回null 。 |
fun <T> Iterable<T>.first(): T |
返回第一個元素。 |
fun <T> Iterable<T>.first(predicate: (T) -> Boolean): T |
它返回與給定謂詞匹配的第一個元素。 |
fun <T> Iterable<T>.firstOrnull(): T? |
它返回第一個元素,如果collection 為空,則返回null 。 |
fun <T> Iterable<T>.indexOf(element: T): Int |
它返回給定元素的第一個索引,如果元素不包含在集合中,則返回-1 。 |
fun <T> Iterable<T>.indexOfFirst(predicate: (T) -> Boolean): Int |
它返回與給定謂詞匹配的第一個元素的索引,如果該元素不包含在集合中,則返回-1 。 |
fun <T> Iterable<T>.indexOfLast(predicate: (T) -> Boolean): Int |
它返回與給定謂詞匹配的最後一個元素的索引,如果該元素不包含在集合中,則返回-1 。 |
infix fun <T> Iterable<T>.intersect(other: Iterable<T>): Set<T> |
它返回一個集合,其中包含此集合和給定集合中存在的所有元素。 |
fun <T> Collection<T>.isNotEmpty(): Boolean |
如果不為空,則返回true 。 |
fun <T> Iterable<T>.last(): T |
它返回最後一個元素。 |
fun <T> Iterable<T>.last(predicate: (T) -> Boolean): T |
它返回與給定謂詞匹配的最後一個元素。 |
fun <T> Iterable<T>.lastIndexOf(element: T): Int |
它返回給定元素的最後一個索引,如果集合中不存在元素,則返回-1 。 |
fun <T> Iterable<T>.lastOrnull(): T? |
它返回集合的最後一個元素,如果集合為空,則返回null 。 |
fun <T> Iterable<T>.lastOrnull(predicate: (T) -> Boolean): T? |
它在匹配給定謂詞後返回最後一個元素,如果在集合中找不到這樣的元素,則返回null 。 |
fun <T : Comparable<T>> Iterable<T>.max(): T? |
它返回最大的元素,如果集合中沒有元素,則返回null 。 |
fun <T, R : Comparable<R>> Iterable<T>.maxBy(selector: (T) -> R): T? |
它返回第一個產生給定函式最大值的元素,如果集合中沒有元素,則返回null 。 |
fun <T : Comparable<T>> Iterable<T>.min(): T? |
它返回最小的元素,如果集合中沒有元素,則返回null 。 |
fun <T, R : Comparable<R>> Iterable<T>.minBy(selector: (T) -> R): T? |
它返回給定函式的最小值的第一個元素,如果沒有元素則返回null 。 |
operator fun <T> Set<T>.minus(element: T): Set<T> |
它返回一個包含原始集的所有元素的集合,除了那些給定的元素外。 |
operator fun <T> Set<T>.minus(elements: Iterable<T>): Set<T> |
它返回一個包含原始集合的所有元素的集合,除了那些給定的元素集合外。 |
operator fun <T> Iterable<T>.minus(element: T): List<T> |
它返回一個列表,其中包含原始集合的所有元素,但給定的元素陣列中包含的元素除外。 |
fun <T> Set<T>.minusElement(element: T): Set<T> |
它返回一個包含原始集的所有元素的集合,除了那些給定的元素外。 |
fun <T> Iterable<T>.minusElement(element: T): List<T> |
它返回一個列表,其中包含原始集合的所有元素,但第一次出現的是給定元素。 |
operator fun <T> Set<T>.plus(element: T): Set<T> |
它返回一組原始集合的所有元素以及給定元素(如果它尚未存在於集合中)。 |
operator fun <T> Set<T>.plus(elements: Iterable<T>): Set<T> |
它返回一個集合,其中包含原始集合的所有元素以及集合中尚未存在的給定元素集合。 返回的集合是以與原始集合相同的順序保留元素的疊代。 |
operator fun <T> Iterable<T>.plus(element: T): List<T> |
它返回一個列表,其中包含原始集合的所有元素以及給定的元素。 |
fun <T> Set<T>.plusElement(element: T): Set<T> |
它返回一個集合,其中包含原始集合的所有元素以及給定元素。 |
fun <T> Iterable<T>.plusElement(element: T): List<T> |
它返回一個列表,其中包含原始集合的所有元素以及給定的元素。 |
fun <T> Iterable<T>.reversed(): List<T> |
它以相反的順序返回包含元素的列表。 |
fun <T> Iterable<T>.single(): T |
它返回單個元素,或者如果集合有多個元素或為空,則丟擲異常。 |
fun <T> Iterable<T>.singleOrnull(): T? |
它返回單個元素,如果集合有多個元素或者為空,則返回null 。 |
首先使用setOf()
函式宣告和遍歷set
元素的範例。 在這個例子中,建立了一組Int
型別非泛型和另一個泛型的Any
型別集。範例 -
fun main(args: Array<String>){
val intSet = setOf(12,16,24,29,4,5)
val mySet: Set<Any> = setOf(12,16,24,29,4,5,"Java","Ajax")
println(".......print Int set.........")
for(element in intSet){
println(element)
}
println(".......print Any set.........")
for(element in mySet){
println(element)
}
}
執行上面範例程式碼,得到以下結果 -
.......print Int set.........
12
16
24
29
4
5
.......print Any set.........
12
16
24
29
4
5
Java
Ajax
在上面的例子中,在intSet
和mySet
中都宣告了元素24
兩次,但在遍歷它們時,它們只列印元素24
一次。 這是因為set
介面不支援重複元素。
contains()
函式檢查給定元素是否存在於當前集合中。 如果它包含在集合中,則返回true
,否則返回false
。 而containsAll()
函式檢查集合型別的所有元素是否存在於當前集合中。 如果集合包含集合型別的所有元素,則返回true
,否則返回false
。
fun main(args: Array<String>){
val mySet: Set<Any> = setOf(2,6,4,29,5,"Ajax","Java")
val intSet = setOf(6,4,29)
println(".......print Any set.........")
for(element in mySet){
println(element)
}
println("...mySet.contains\"Java\"...")
println(mySet.contains("Java"))
println("...mySet.contains(20)...")
println(mySet.contains(20))
println("...mySet.containsAll(intSet)...")
println(mySet.containsAll(intSet))
}
執行上面範例程式碼,得到以下結果 -
.......print Any set.........
2
6
4
29
5
Ajax
Java
...mySet.contains"Java"...
true
...mySet.contains(20)...
false
...mySet.containsAll(intSet)...
true
isEmpty()
函式檢查當前set是否為空。 如果set為空,則isEmpty()
函式返回true
,否則返回false
。 並且isNotEmpty()
檢查當前set是否為空。 如果set不為空,則isNotEmpty()
函式返回true
,否則返回false
。
fun main(args: Array<String>){
val mySet: Set<Any> = setOf(2,6,4,29,5,"Ajax","Java")
println(".......print Any set.........")
for(element in mySet){
var element1:String = element.toString();
print(element1+",")
}
println();
println("...mySet.isEmpty()...")
println(mySet.isEmpty())
println("...mySet.isNotEmpty()...")
println(mySet.isNotEmpty())
}
執行上面範例程式碼,得到以下結果 -
.......print Any set.........
2,6,4,29,5,Ajax,Java,
...mySet.isEmpty()...
false
...mySet.isNotEmpty()...
true
drop()
函式返回除集合的前n
個元素之外的所有元素。
fun main(args: Array<String>){
val mySet: Set<Any> = setOf(2,6,4,29,5,"Ajax","Java")
println(".......print Any set.........")
for(element in mySet){
println(element)
}
val remainList= mySet.drop(4)
println(".......print Set after mySet.drop(4).........")
for(element in remainList){
println(element)
}
}
執行上面範例程式碼,得到以下結果 -
.......print Any set.........
2
6
4
29
5
Ajax
Java
.......print Set after mySet.drop(4).........
5
Ajax
Java
elementAt()
函式返回給定索引處的元素,而elementAtOrNull()
函式也返回給定索引處的元素,但如果指定的索引不包含元素,則返回null
。
fun main(args: Array<String>){
val mySet: Set<Any> = setOf(2,6,4,29,5,"Ajax","Java")
println(".......print Any set.........")
for(element in mySet){
println(element)
}
println(".......print mySet.elementAt(3).........")
println(mySet.elementAt(3))
println(".......print mySet.elementAtOrNull(5).........")
println(mySet.elementAtOrNull(5))
println(".......print mySet.elementAtOrNull(50).........")
println(mySet.elementAtOrNull(50))
}
執行上面範例程式碼,得到以下結果 -
.......print Any set.........
2
6
4
29
5
Ajax
Java
.......print mySet.elementAt(3).........
29
.......print mySet.elementAtOrNull(5).........
Ajax
.......print mySet.elementAtOrNull(50).........
null