티스토리 뷰
Collection이란?
Collection(컬렉션)은 대부분의 프로그래밍 언어에 있는 자료구조로, 객체의 모음이라 할 수 있다.
컬렉션은 Generic으로 구현이 되어 다양한 타입과 함께 사용할 수 있다.
코틀린에는 List, Set, Map 3가지 컬렉션이 있다.
List, Set, Map 모두 Mutable과 Immutable을 별개로 지원한다.
Mutable vs Immutable
Mutable은 가변. read&write로 생성된 이후 값을 변경할 수 있다.
반면 Immutable은 불변. read-only로 생성된 이후에 값을 수정할 수 없다.
코틀린의 컬렉션들은 아래와 같은 상속 구조를 가지고 있다.
간단하게 예제를 작성해보면서 컬렉션을 어떻게 사용하는지 알아보자!

List
리스트는 데이터를 저장하거나 삭제할 때 순서를 지키는 Collection이다.
배열처럼 인덱스를 이용해 직접 접근할 수 있다.
중복된 값을 가질 수 있고, 추가 삭제 교체가 쉽다.
read-only인 리스트는 listOf() 메서드로 생성할 수 있다.
val numbers : List<String> = listOf("one", "two", "three", "four") | |
// val numbers = listOf("one", "two", "three", "four") | |
println("Number of elements: ${numbers.size}") | |
println("Third element: ${numbers.get(2)}") | |
println("Fourth element: ${numbers[3]}") | |
println("Index of element \"two\" ${numbers.indexOf("two")}") |
- 형 추론으로 자료형을 생략할 수 있다.
- get(index)도 지원하고 배열처럼 [index]도 지원한다.
read&write인 리스트는 mutableListOf() 메서드로 생성할 수 있다.
val numbers = mutableListOf(1, 2, 3, 4) | |
numbers.add(5) // 맨 뒤에 5 추가 | |
numbers.add(1, 10) // 1번 인덱스가 10 추가 | |
numbers.addAll(3, listOf(6, 7, 8)) | |
numbers.removeAt(1) // 2 삭제 | |
numbers.remove(3) // 3 삭제 | |
numbers[3] = 6 // 3번째 인덱스의 값을 6으로 수정 | |
println(numbers) |
- add(element) : 맨 뒤에 요소 추가
- add(index, element) : 특정 인덱스 위치에 요소 추가
- addAll(index, elements) : 특정 인덱스에 컬렉션 추가. index를 생략하면 맨 뒤에 추가.
- removeAt(index) : 특정 인덱스에 있는 값 삭제
- remove(element) : 특정 요소 삭제
- list[index] = value : 값 수정
- List와 같은 컬렉션 데이터를 println()에 넣으면 대괄호 [] 사이에 ,로 데이터를 구분해서 출력해준다
Set
중복되지 않은 요소들로 구성된 Collection이고 순서는 특별히 정해져 있지 않다.
null 객체를 가질 수 있지만 동일한 객체는 추가될 수 없기 때문에 1개만 가지고 있을 수 있다.
forEach나 Iterator로 모든 객체를 탐색할 수 있다.
read-only인 Set은 setOf() 메서드로 생성할 수 있다.
val numbers = setOf(1, 2, 3, 4) | |
println("Number of elements: ${numbers.size}") | |
if (numbers.contains(1)) println("1 is in the set") | |
println("numbers.isEmpty() : ${numbers.isEmpty()}") | |
val numbersBackwards = setOf(4, 3, 2, 1) | |
println("The sets are equal: ${numbers == numbersBackwards}") |
- size : 컬렉션의 크기 반환
- contains(element) : 특정 요소가 Set에 있는지 확인
- isEmpty() : 아무 값도 포함하고 있지 않을 때 true 반환
- numbers == numbersBackwards : 크기가 같고 같은 요소를 가지고 있으면 true 반환
read&write인 Set은 mutableSetOf() 메서드로 생성할 수 있다.
val numbers = mutableSetOf<Int>(33, 22, 11, 1, 22, 3) | |
numbers.add(100) // 100 추가 | |
println(numbers) | |
numbers.remove(33) // 33 삭제 | |
numbers.removeIf({ it < 10 }) // 10 이하의 숫자를 삭제 | |
println(numbers) |
- add(element) : 요소 추가
- remove(element) : 특정 요소 삭제
- removeIf(filter) : 람다 표현식으로 조건 전달. 조건에 맞는 요소 삭제.
Map
key와 value를 짝지어 저장하는 Collection이다.
value는 중복된 값들이 존재할 수 있지만 key값은 고유한 값 만 가진다.
key와 value를 Pair 객체로 표현하고 A to B 로 간단히 표현할 수 있다.
read-only인 Map은 mapOf() 메서드로 생성할 수 있다.
val numbersMap = mapOf("key1" to 1, "key2" to 2, "key3" to 3, Pair("key4",1)) | |
println("All keys and values : ${numbersMap.entries}") | |
println("All keys: ${numbersMap.keys}") | |
println("All values: ${numbersMap.values}") | |
if ("key2" in numbersMap) println("Value by key \"key2\": ${numbersMap["key2"]}") | |
if (1 in numbersMap.values) println("The value 1 is in the map") | |
if (numbersMap.containsValue(1)) println("The value 1 is in the map") // same as previous |
- map.entries : Map의 key와 value 쌍을 모두 출력
- map.keys : Map의 key 모두 출력
- map.values : Map의 value 모두 출력
- containsValue(value) : 특정 value를 가지고 있는 key 반환
read&write인 Map은 mutableMapOf() 메서드로 생성할 수 있다.
val numbersMap = mutableMapOf("one" to 1, "two" to 2) | |
numbersMap.put("three", 3) | |
numbersMap["one"] = 11 | |
println(numbersMap.remove("one")) | |
println(numbersMap.remove("two", 2)) | |
for ((k, v) in numbersMap) { | |
println("${k} : ${v}") | |
} | |
numbers.forEach { (k, v) -> print("${k} : ${v}") } | |
println(numbersMap) |
- put(key, value) : 객체 추가
- map[key] = value : 배열 방식으로 객체 추가
- remove(key) : 특정 key값인 쌍을 삭제하고 value값 반환
- remove(key, value) : key와 value가 일치하는 원소가 있다면 삭제한 후 true 반환
List, Set, Map 세 가지 컬렉션에 대해 살펴봤다.
다음 시간에는 컬렉션에서 사용되는 함수에 대한 포스팅으로 돌아오겠슴당~~
'프로그래밍 언어 > Kotlin' 카테고리의 다른 글
Kotlin Collection 관련 함수들을 알아보자! (filter, map) (0) | 2021.07.29 |
---|---|
Kotlin 기본 다지기 4 (0) | 2021.07.26 |
Kotlin 기본 다지기 3 (0) | 2021.07.25 |
Kotlin 기본 다지기 (0) | 2021.07.25 |
Kotlin 기본 다지기 2 (0) | 2021.07.24 |
- Total
- Today
- Yesterday
- 그래프
- 트리
- 백준
- 스택
- 자바
- 구현
- 알고리즘
- 투 포인터
- Two Pointer
- Kotlin
- 문자열
- 브루트포스
- dfs
- 재귀
- Java
- 분할 정복
- 두 포인터
- 위상 정렬
- 정렬
- 큐
- BOJ
- BFS
- 배열
- SWEA
- C++
- SW Expert Academy
- 프로그래머스
- programmers
- 이분 탐색
- algorithm
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |