출처: https://www.boostcourse.org/mo234/lecture/154314?isDesc=false
컬렉션이란 자주 사용되는 기초적인 자료구조를 모아놓은 일종의 프레임워크로, 코틀린에서 표준 라이브러리로 제공된다.
cf) 프레임워크와 라이브러리의 차이점: https://cocoon1787.tistory.com/745
컬렉션의 종류로는 List, Set, Map 등이 있으며 자바와는 다르게 불변형 (immutable)과 가변형 (mutable)으로 나눠서 컬렉션을 다룰 수 있다.
다이어그램의 가장 상위에 있는 Iterable 인터페이스는 컬렉션이 연속적인 요소를 표현할 수 있게 한다.
cf) 헬퍼 함수: 객체 생성 시 요소를 직접 선언하기 보다는 특정 함수의 도움을 통해 생성
public fun <T> listOf(vararg elements: T): List<T>
val numbers: List<Int> = listOf(1, 2, 3, 4, 5)
val names: List<String> = listOf("one", "two", "three")
package chap05.section1
fun main() {
val fruits = listOf("apple", "banana", "kiwi")
for(item in fruits){
println(item)
}
for(i in fruits.indices){ // 인덱스도 같이 출력
println("fruits[$i] = ${fruits[i]}")
}
}
apple
banana
kiwi
fruits[0] = apple
fruits[1] = banana
fruits[2] = kiwi
package chap05.section1
fun main() {
val emptyList: List<String> = emptyList()
println(emptyList) // 비어있는 리스트
val nonNullList: List<Int> = listOfNotNull(2, 45, 2, null, 5, null)
println(nonNullList) // 널을 제외한 리스트
}
[]
[2, 45, 2, 5]
val names: List<String> = listOf("one", "two", "three")
println(names.size)
println(names[0])
println(names.indexOf("two"))
println(names.contains("three"))
public fun <T> arrayListOf(vararg elements: T): ArrayList<T>
package chap05.section1
fun main() {
val stringList: ArrayList<String> = arrayListOf("Hello", "Kotlin", "Wow")
stringList.add("Java")
stringList.remove("Hello")
println(stringList)
}
[Kotlin, Wow, Java]
public fun <T> mutableListOf(vararg elements: T): MutableList<T>
package chap05.section1
fun main() {
val mutableList: MutableList<String> = mutableListOf("Kildong", "Dooly", "Chelsu")
mutableList.add("Ben")
mutableList.removeAt(1)
mutableList[0] = "Sean"
println(mutableList)
// 자료형의 혼합
val mutableListMixed = mutableListOf("Android", "Apple", 5, 6, 'X')
println(mutableListMixed)
}
[Sean, Chelsu, Ben]
[Android, Apple, 5, 6, X]
package chap05.section1
fun main() {
val names: List<String> = listOf("one", "two", "three")
val mutableNames = names.toMutableList() // 새로운 가변형 리스트 생성
mutableNames.add("four")
println(mutableNames)
}
리스트의 요소를 변경할 일이 별로 없으면, 불변형으로 사용하는 것이 더 안전하다.
val list1: List<Int> = LinkedList<Int>()
val list2: List<Int> = ArrayList<Int>()
cf) 배열과 달리, 연결 리스트는 메모리 상에 데이터들이 연속적으로 위치하지 않는다. 연결 리스트의 각 노드는 포인터로 연결되어 있다.
cf) 무변성과 공변성?