Kotlin- Map의 종류(TreeMap, LinkedHashMap, HashMap)

상상코딩·2022년 1월 3일
0

코틀린

목록 보기
4/5

TreeMap

BST(자식노드 2개인 BinarySearchTree) 중에서도 RB tree를 사용하여 만들어진 트리 맵.

get(), getOrDefault(), put(), remove(), containsKey() 모두 O(logN) 의 시간복잡도를 가진다.

-> HashMap이나 LinkedHashMap보다 전반적으로 더 느린 속도를 보이지만, NavigableMap과 SortedMap의 함수들을 사용하여 장점을 살리는 구체화된 목적에 사용될 수 있다!

fun main(){
    val treeMap = TreeMap<Char, Int>()  //빈 treeMap 생성
    val treeMap2 = TreeMap<Char, Int> {c1, c2 -> c2.compareTo(c1)}  //Comparator를 인자로 받아 key값의 역순으로 정렬하는 treeMap 생성
    val treeMap3 = TreeMap<Char, Int>(treeMap2) //SortedMap이나 Map을 인자로 받아 treeMap 생성
}

HashMap

순서를 유지하지 않음.

빠른 접근 속도. collision이 일어나는 경우 조금 느려짐.
배열을 기반으로 데이터를 관리하기 때문에, 데이터의 총 개수를 대충 알고 있다면 초기용량을 정해주자.

get(), getOrDefault(), put(), remove(), containsKey() 모두 O(1) 의 시간복잡도를 가진다.
key를 통해 검색하지 않고 Value를 통해 검색한다면 O(N)

fun main(){
    val hashMap = HashMap<String, Int>()  //빈 HashMap 생성(초기 용량:16, load factor:0.75)
    val hashMap2 = HashMap<String, Int>(5) //초기 용량이 5인 HashMap 생성
    val hashMap3 = HashMap<String, Int>(5,0.8f)   //초기 용량이 5이고 load factor가 0.8인 HashMap 생성
    val hashMap4 = HashMap<String, Int>(hashMap)  //Map을 인자로 받아 HashMap 생성
}

LinkedHashMap

데이터를 추가한 순서대로 데이터를 보관 - iterate시 데이터 순으로 접근
데이터 저장 순서를 기억하기 위해 저장공간을 HashMap보다 필요로 함.

빠른 접근 속도. collision이 일어나는 경우 조금 느려짐.
배열을 기반으로 데이터를 관리하기 때문에, 데이터의 총 개수를 대충 알고 있다면 초기용량을 정해주자.

시간복잡도는 HashMap과 동일

fun main(){
    //빈 LinkedHashMap 생성(초기 용량:16, load factor:0.75)
    val linkedHashMap = LinkedHashMap<Char, Int>()
    //초기 용량이 5인 LinkedHashMap 생성
    val linkedHashMap2 = LinkedHashMap<Char, Int>(5)
    //초기 용량이 5이고 load factor가 0.8인 LinkedHashMap 생성
    val linkedHashMap3 = LinkedHashMap<Char, Int>(5, 0.8f)
    //초기 용량이 5이고 load factor가 0.8이며 Map에 추가한 순서대로 LinkedHashMap 생성
    val linkedHashMap4 = LinkedHashMap<Char, Int>(5, 0.8f, false)
    //Map을 인자로 받아 LinkedHashMap 생성 
    val linkedHashMap5 = LinkedHashMap<Char, Int>(linkedHashMap)
    //빈 HashMap 생성(초기 용량:16, load factor:0.75)
    val linkedHashMap6 = mutableMapOf<Char, Int>()
    //들어갈 key, value 쌍을 나열해서 LinkedHashMap 만들기
    val linkedHashMap7 = mutableMapOf('A' to 0, 'B' to 1, 'C' to 2) 
}

Ref.
https://medium.com/depayse/kotlin-collections-2-map-hashmap-treemap-linkedhashmap-76195842f0c8

profile
히히낙낙

1개의 댓글

comment-user-thumbnail
2023년 2월 22일

잘 읽었습니다~~!

답글 달기