Post

Kotlin HashSet과 LinkedHashSet의 차이

코틀린에서 HashSet을 생성하기 위해 hashSetOf를 사용하며, LinkedHashSet을 생성하기 위해 setOf를 사용합니다. setOf를 자세히 들여다보면 LinkedHashSet으로 만드는 것을 볼 수 있습니다.

1
2
3
4
5
6
7
8
9
public fun <T> setOf(vararg elements: T): Set<T> = if (elements.size > 0) elements.toSet() else emptySet()

public fun <T> Array<out T>.toSet(): Set<T> {
    return when (size) {
        0 -> emptySet()
        1 -> setOf(this[0])
        else -> toCollection(LinkedHashSet<T>(mapCapacity(size)))
    }
}

HashSet은 요소를 추가한 순서를 저장하지 않고 LinkedHashSet은 요소를 추가한 순서를 저장합니다.
코드 결과로 보면 다음과 같습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
val hashSet = hashSetOf("apple","banana","grape").apply {
  add("orange")
  add("melon")
}

val linkedHashSet = mutableSetOf("apple","banana","grape").apply {
  add("orange")
  add("melon")
}

println("hashSet = $hashSet")
println("linkedHashSet = $linkedHashSet")
    
//출력
hashSet = [banana, orange, apple, grape, melon]
linkedHashSet = [apple, banana, grape, orange, melon]

이렇게 되면 LinkedHashSet은 요소의 순서를 저장하기 때문에 index를 통해서 접근할 수 있을것 같지만, Set자체는 index로 객체를 관리하지 않기 때문에 index를 통한 접근이 불가능합니다.

This post is licensed under CC BY 4.0 by the author.