본문 바로가기
Android/Kotlin

List, Set, Map

by KDGdev 2023. 2. 20.

List, Set, Map


Kotlin에는 컬렉션이라는 자료구조가 존재합니다.

 

컬렉션은 같은 타입의 여러 객체를 저장하고 관리하기 위해 설계된 자료구조입니다.

 

컬렉션에는 List, Set, Map이 존재하는데 이에 대해 알아보겠습니다.

 

List

List를 간단히 설명하자면 순서가 있는 자료구조입니다.

  • 특징
    • 포인터를 사용하여 다음 값의 주소를 가리켜 데이터가 순서대로 이어져 있습니다.
    • index로도 접근 가능한데 이는 메모리상에 순서대로 있다는 것을 뜻하는 게 아니라 데이터의 순번을 의미합니다.
    • element의 값으로 null을 넣을 수 없습니다.
  • 구현
    • list에는 element의 추가와 변경이 불가능한 일반적인 list와 추가와 변경이 가능한 mutableList가 있습니다.
val numbers = listOf(1, 2, 3, 4, 5)
val emptyNumbers = listOf<Int>()

// mutable
val mutableNumbers = mutableListOf(1, 2, 3, 4, 5)
val mutableEmptyNumbers = mutableListOf<Int>()
val mutableEmptyNumbers = mutableListOf()

list를 index로 접근할 때 해당 index에 데이터가 존재하지 않으면 IndexOutOfBoundsException 에러가 발생합니다.

이는 다음 코드와 같이 방지할 수 있습니다.

val numbers = listOf(1, 2, 3, 4, 5)

numbers.getOrNull(5) // 5번째 데이터에 접근, 데이터가 없으면 null 반환
numbers.getOrElse(5){-1} // 5번째 데이터에 접근, 데이터가 없으면 else인 -1을 반환
numbers.elementAtOrNull(5) // getOrNull과 동일
numbers.elementAtOrElse(5){-100} // getOrElse와 동일

 

Set

set이란 고유한 요소들을 갖는 자료구조입니다.

  • 특징
    • Kotlin에서 Set은 element의 순서를 유지하기 때문에 index로 접근 가능합니다.
    • index가 있지만 두 개의 Set이 크기가 같고, element가 모두 동일하면 element의 순서와 상관없이 두 Set은 동일합니다.
  • 구현
    • list와 마찬가지로 추가와 변경이 불가능한 일반적인 set과 추가와 변경이 가능한 mutableSet이 있습니다.
val numbers = setOf(1, 2, 3, 4, 5)
val numbers = setOf<Int>()  

val numbers = mutableSetOf(1, 2, 3, 4, 5) // mutable
numbers.add(6)
numbers.remove(1) // numbers -> (2, 3, 4, 5) 

 

Map

Map이란 key-value 구조의 자료구조입니다.

 

key 값으로 value 값에 접근합니다.

  • 특징
    • 빈 Map에 접근하면 Exception을 발생시키지 않고 null을 반환합니다.
    • 같은 key를 가진 값을 추가했다면 마지막에 추가한 값으로 변경됩니다.
    • 그렇기에 key는 하나만 존재할 수 있고 이를 만족한다면 value 값은 중복이 될 수 있습니다.
    • Set과 마찬가지로 크기가 같고, element가 모두 동일하면 두 Map은 동일합니다.
  • 구현
    • list와 마찬가지로 추가와 변경이 불가능한 일반적인 map과 추가와 변경이 가능한 mutableMap이 있습니다.
val value = mapOf(1 to "a", 2 to "b")
val value = mapOf<Int, String>()
value[0] // null

val mutableValue = mutableMapOf(1 to "a", 2 to "b")
mutableValue.put(3, "c")
mutableValue[4] = "d"
mutableValue.remove(2) // key가 2인 element를 제거

 

※ 잘못된 정보, 혹은 다른 의견이 있다면 댓글로 말해주세요. 감사합니다.

'Android > Kotlin' 카테고리의 다른 글

백킹프로퍼티(Backing Properties)란?  (0) 2023.04.06
Kotlin 연산자 - ? / !! / ?: / is / as  (0) 2023.02.22
Scope Function  (0) 2023.02.21