В Kotlin есть несколько способов удалить дубликаты из коллекции, каждый с разными характеристиками производительности и сохранения порядка.
distinct()Функция-расширение distinct() удаляет дубликаты, сохраняя исходный порядок элементов.
val list = listOf("a", "a", "b", "c", "c")
val unique = list.distinct() // [a, b, c]
LinkedHashSet для отслеживания уже встреченных элементовList, что упрощает работу с результатомtoSet()Преобразует коллекцию в LinkedHashSet, который тоже сохраняет порядок вставки.
val unique = list.toSet() // [a, b, c]
distinct(), так как не создаёт промежуточный списокSet вместо ListtoHashSet()Преобразует коллекцию в HashSet, который не сохраняет порядок.
val unique = list.toHashSet() // порядок не гарантирован
O(1)| Подход | Порядок сохранён | Тип возврата | Производительность |
|---|---|---|---|
distinct() | ✅ Да | List | Средняя |
toSet() | ✅ Да | Set | Хорошая |
toHashSet() | ❌ Нет | Set | Лучшая |
distinct(), когда нужен список с сохранённым порядкомtoSet(), когда подходит множество с сохранённым порядкомtoHashSet(), когда нужна максимальная производительность и порядок не важенФункция distinct() внутренне использует LinkedHashSet для отслеживания уже встреченных элементов, сохраняя при этом исходный порядок элементов коллекции.
Новый — ещё не проверен сообществом
Вы