본문 바로가기

kotlin

collection-Map

collection-Map


Map, Dictionary, Hash : 데이터 구별을 위한 키와 그에 대응되는 값으로 표현되는 공통 데이터 구조이다.(연관배열)




위의 사진과 같이 Key와 Value의 값을 이용한 알고리즘 이다.


이때 Key 값은 중복을 절대 허용하지 않는다.


Kotlin 에서는 아래와 같이 쉽게 map을 구현할 수 있다.


val students = mapOf("Alice" to 23)


mapOf() 를 선언하고 to를 기준으로 앞에 key 뒤에 value이다. to 는 키워드가 아니라 중계식 함수 이다.



위에서 map은 중복을 허용하지 않는다고 했었다. 그렇다면 중복 key값을넣으면 어떻게 되는지 보자


val students = mapOf("Alice" to 23 , "peter" to 23 ,
"Anna" to 25 , "Alice" to 22 ,"Alice" to 20)

val studentMap : Map<String , Int> = students

println("stMap => ${studentMap} with size ${studentMap.size}")


이렇게 Alice 라는 key값을 중복적으로 넣고 출력해 보았다.




마지막 즉, 최종의 Map key만 출력이 되는것을 볼 수 있다. key는 중복 될수 없기 때문에 마지막 key값만 유효하다.



map의 value를 가져오는 방법은 어떤것들이 있는지 알아보자



studentMap["Alice"]
studentMap.get("Alice")


위의 두개는 동일하게 Alice라는 key의 value값을 가져온다.


만약 map에 존재하지 않는 값에 접근하면 어떻게 될까??



studentMap.get("aaaa")


결과는 그냥 null을 반환한다.


null에 대해 예외를 발생하게 하고싶다면 아래와 같이 getValue를 사용하도록 하니 적절히 사용하는것이 중요해 보인다.


studentMap.getValue("aaaa")



mapOf(  ) 안에 최기화 해주는것도 다양하다.


val studentss = mapOf("Alice" to 23 , "peter".to(23) ,
Pair("Peter", 26))


.to 라고 선언 하는것도 가능하고 Pair 라는 데이터클래스를 선언하여 한 쌍으로 표시해도 데이터가 집어넣어진다.



아래와 같이 집어 데이터 입력도 가능하다 


studentss["abc"] = 123
studentss.set("qqqq" , 123213)
studentss.put("wwwww" , 23232323)


단, 우리가 알고있는 arrayOf() , listOf(), mapOf() 들은 선언하면 val과 같이 한번 초기화하면 변할 수 없다.


그래서 변화할 수 있는 자료구조로 만들어 주기 위해 



 mutableMapOf("Alice" to 23 , "peter".to(23) ,
Pair("Peter", 26))

앞에 mutable 이라고 붙는 자료구조를 써주면 된다.



'kotlin' 카테고리의 다른 글

Function : VARIABLE ARGUMENT  (0) 2018.12.09
함수기본(Function)  (0) 2018.12.09
For문  (0) 2018.12.06
Array  (0) 2018.12.06
Nullable (? , !!, ?:)  (0) 2018.12.06