[Kotlin] Collections Map에 대한 모든 사용법

2021. 8. 16. 15:31[Algorithm] 알고리즘 정리 - Kotlin

반응형

안녕하세요.

알고리즘 문제 풀이 중 Map에 대한 Method와 속성등 까먹는게 너무 많아서 정리해둡니다.

Map이란 ?

Map은 다른 자료구조와는 다르게 Key와 Value를 쌍으로 데이터를 저장하는 자료구조 입니다.

Key를 통해 Value에 접근할 수도 있고 Value를 통해 Key를 찾을 수도 있습니다.

또 하나의 정의된 Map에서는 Key의 중복은 불가능 하지만 Value의 중복은 가능 합니다.

 

1. Map 생성

    var map = mapOf<String, Int>("안드" to 1, "로이드" to 2) // 수정할 수 없는 UnMutable
    print(map)
    map["빠끄"] = 3
    var mutableMap = mutableMapOf<String, Int>("안드" to 1, "로이드" to 2) // 수정할 수 있는 Mutable
    print(mutableMap)
    mutableMap["앙드"] = 3
    print(mutableMap)

위와 같이 map을 선언하였습니다. Map은 UnMutable로 처음 정의한 다음에는 수정할 수 없습니다.

map["빠끄"] = 3은 잘못된 코드

하지만 MutableMap은 수정이 가능합니다.

출력 결과 입니다.

2. Map의 다양한 메소드

알고리즘 문제를 풀면서 가장 많이 사용하였고 필요한 메소드들을 설명 드리겠습니다.2.1 추가

var hashMap = HashMap<String,Int>()
hashMap["알고리즘 어려워"] = 1
// 이렇게 '알고리즘 어려워'라는 키와 value 1이 대입됩니다.

2.2 삭제

hashMap.remove("알고리즘 어려워")
// 키값을 활용해 제거할 수 있습니다.

2.3 수정

첫 번째
hashMap["알고리즘 어려워"] = 3
// 간단한 수정 방법

if(hashMap.containsKey("알고리즘 어려워") {
hashMap["알고리즘 어려워"] = hashMap["알고리즘 어려워"] + 1
}
// 알고리즘 문제 중 중복을 해결하기 위해 map을 쓰는 경우가 많은데 containsKey 메서드로 해당 키값이 
// 존재하는지 확인하고 수정하는 방법이다.
// 값이 있는지 확인하고 싶을 때는 containsValue를 사용한다.
두 번째
hashMap.replace("알고리즘어려워", hashMap["알고리즘 어려워"] + 7)
hashMap.replace("알고리즘어려워", 5)
replace 메서드를 사용하는 방법도 있다.

2.4 클리어

hashMap.clear()

2.5 Count

hashMap.count()
// 이 메서드로 hashMap에 들어 있는 원소의 개수를 알 수 있다.
hashMap.count { it.value == 0} 
//이 메서드로 hashMap의 들어 있는 원소 중 Value의 값이 0인 원소의 개수를 알 수 있다.

2.6 filter

 val items = HashMap<String, Int>()
    items["A"] = 10
    items["B"] = 20
    items["C"] = 30
val filteredItems = items.filterKeys {it == "A" || it == "C"}
println("키가 A이고 C인 값을 찾기 $filteredItems")
val filteredItems2 = items.filterValues {it == 20}
print("Value가 20인 Map은 $filteredItems2")
val filteredItems3 = items.filter {it.key == "B" && it.value == 20}
println("Key가 B이고 Value가 20인 값 $filteredItems3")

-- 출력 --

2.7 for문

Map의 for문은 일반 list의 for문과는 조금 다릅니다.

    val items = HashMap<String, Int>()
    items["A"] = 10
    items["B"] = 20
    items["C"] = 30

// 1번 for Each
    items.forEach { key, value ->
        println("$key 이고$value 이다")
    }
    items.forEach { key, value ->
        if(key == "A") {
            println(value)
        }
    }
println("----2번----")
// 2번 for Loop
    for((key,value) in items) {
        println("$key 이고 $value 이다.")
    }

    for((key,value) in items) {
        if(key == "C") {
            println("$value")
        }
    }
}

---- 출력 ----

2.8 정렬

 {
 val items = HashMap<String, Int>()
    items["A"] = 10
    items["B"] = 20
    items["C"] = 30

// 키값으로 정렬
var map = items.toSortedMap (compareBy{it}) // 키값을 오름차순 정렬
var map2 = items.toSortedMap(compareByDescending {it})

// value를 중심으로 정렬
map을 value 중심으로 정렬하려면 list로 변환 후 map으로 변환해야 합니다.
var sortedMap = items.toList().sortedBy {it.second}.toMap().toMutableMap() // 오름차순
var sortedMap = items.toList().sortedByDescending {it.second}.toMap().toMutableMap() // 내림차순
}

이정도로 Map의 대한 메소드 소개를 마치겠습니다.

더 많은 메소드를 알고 싶으시다면 

https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-mutable-map/

 

MutableMap - Kotlin Programming Language

 

kotlinlang.org

에서 확인해주세요~~

 

반응형