Освой Kotlin играючи

Сайт Александра Климова

Шкодим

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

Set

В коллекции с интерфейсом Set дубликаты элементов не допускаются.

Примеры методов для работы с коллекциями смотрите в примерах со списками.

setOf()

Неизменяемая Java-коллекция Set создаётся функцией setOf():


val set = setOf(1, 3, 9)
println(set.javaClass) // class java.util.LinkedHashSet

var intSet: Set<Int> = setOf(1, 2, 3)  // разрешены только Integer

val cats = setOf("Мурзик", "Барсик", "Рыжик")
println(cats)

Если попытаетесь добавить дубликат, то он будет просто отброшен и не попадёт в набор.

Разбить на две коллекции по указанному признаку можно через функцию partition():


val setA = setOf(1, 2, 3, 4, 5, 6)
val pair = setA.partition {
    it % 2 == 0
}
println(pair) // ([2, 4, 6], [1, 3, 5])

hashSetOf()

Функция hashSetOf() создаёт изменяемую Java-коллекцию HashSet.


//val intsHashSet: java.util.HashSet<Int> = hashSetOf(1, 2, 3, 4)
val intsHashSet = hashSetOf(1, 2, 3, 4)
intsHashSet.add(5)
intsHashSet.remove(2)
println(intsHashSet::class.java) // class java.util.HashSet
println(intsHashSet.elementAt(2)) // 4

sortedSetOf()

Функция sortedSetOf() создаёт изменяемую Java-коллекцию TreeSet с сортированными значениями.


val intSortedSet  = sortedSetOf(9, 1, 8, 3)
intSortedSet.add(6) // добавляем 6
intSortedSet.remove(1) // удаляем 1
println(intSortedSet::class.java) // class java.util.TreeSet
println(intSortedSet) // выводим отсортированные значения [3, 6, 8, 9]
intSortedSet.clear() // очищаем, будет пусто

linkedSetOf()

Функция linkedSetOf() создаёт изменяемую Java-коллекцию LinkedHashSet в том порядке, в котором были занесены данные.


val intLinkedHashSet = linkedSetOf(15, 6, 7, 2, 3)
intLinkedHashSet.add(44)
intLinkedHashSet.remove(2)
println(intLinkedHashSet::class.java) // class java.util.LinkedHashSet
println(intLinkedHashSet) // [15, 6, 7, 3, 44]
intLinkedHashSet.clear()

mutableSetOf()

Ещё одна функция для изменяемой коллекции, использующая интерфейсы MutableCollection и Set.


// только Integer
val intMutableSet: MutableSet<Int> = mutableSetOf(3, 27, 66, 12, 10)
intMutableSet.add(8)
intMutableSet.remove(3)
println(intMutableSet::class.java) // class java.util.LinkedHashSet

Объединить два набора можно через методы addAll() или union().


val setA= mutableSetOf<String>("a","b","c")
val setB= mutableSetOf<String>("a","b","c","d")
setB.addAll(setA)
println(setB)
println(setB.union(setA))
Реклама