Overview
표준 라이브러리로 제공되고 있는 자료구조 중 컬렉션을 알아보겠습니다. 컬렉션은 List, Set, Map등이 있습니다. 컬렉션에 대해서 알아보겠습니다.
이 글은 “Do it! 코틀린 프로그래밍”을 읽으면서 작성되었습니다.
1. Collection
2. List
2. 마치며
Collection
컬렉션은 불변형(immutable)과 가변형(mutable)으로 나누어집니다. 자바에서는 오로지 가변형만 취급되므로, 자바코드와 같이 작성할 경우 주의해야합니다.
컬렉션 | 불변형 | 가변형 |
---|---|---|
List | listOf | mutableListOf, arrayListOf |
Set | setOf | mutableSetOf, hashSetOf, linkedSetOf, sortedSetOf |
Map | mapOf | mutableMapOf, hashMapOf, linkedMapOf, sortedMapOf |
또한, 변수를 선언할 때 불변형 val의 사용을 권장하듯이, 컬렉션도 되도록이면 읽기 전용인 불변형을 선언할 것을 권장합니다. 이제 하나씩 살펴보도록 하겠습니다.
List
List는 불변형일 경우 listOf()함수를 사용하여야 하며 원형은 다음과 같습니다.
public fun <T> listOf(vararg elements: T): List<T>
값을 반환할 때는, List
fun main() {//do it Kotlin chap09.section2
var numbers: List<Int> = listOf(1, 2, 3, 4, 5)
var names: List<String> = listOf("one", "two", "three")
for (name in names) {
println(name)
}
for (num in numbers) print(num)
println()
}
one
two
three
12345
List에 접근할 위 처럼 in을 통해서 각각 변수를 받아 처리도 가능하고, 다음과 같이 인덱스를 지정해서 접근이 가능합니다.
for(index in names.indices) {//인덱스 지정
println("names[$index] = $(names[index])")
}
names[0] = one
names[1] = two
names[2] = three
위와 같이 index를 통해 얻을 수 있습니다.
emptyList(), listOfNotNull()
비어있는 List를 생성하려면 다음과 같이 선언할 수 있습니다.
val emptyList: List<String> = emptyList<String>()
만약 null을 제외하고 초기화 하려면 다음과 같이 초기화 할 수 있습니다.
val nonNullsList: List<Int> = listOfNotNull(2, 45, 2, null, 5, null)
println(nonNullsList)
[2, 45, 2, 5]
List는 다음과 같은 메서드를 멤버로 가지고 있습니다.
멤버 메서드 | 설명 |
---|---|
get(index: Int) | 특정 인덱스를 인자로 받아 해당 요소를 반환한다. |
indexOf(element: E) | 인자로 받은 요소가 첫 번째로 나타나는 인덱스를 반환하며, 없으면 -1을 반환한다. |
lastIndexOf(element: E) | 인자로 받은 요소가 마지막으로 나타나는 인덱스를 반환하고, 없으면 -1을 반환한다. |
listIterator() | 목록에 있는 iterator를 반환한다. |
subList(fromIndex: Int, toIndex: Int) | 특정 인덱스의 from과 to 범위에 있는 요소 목록을 반환한다. |
가변현 List 생성하기
가변형 List를 생성하려면 두가지 헬퍼 함수를 사용하여 생성가능합니다.(arrayListOf(), mutableListOf())
public fun <T> arrayListOf(vararg elements: T): ArrayList<T>
public fun <T> mutableListOf(vararg elements: T): MutableList<T>
다만 이 둘의 차이점은 arrayListOf()의 경우 자료형이 List가 아닌 자바의 ArrayList를 반환합니다. mutableListOf()의 경우 MutableList Type 입니다. MutableList는 ArrayList와 동작상 같고 명시적으로 의미상 차이만 있다고 합니다. 실제 구현은 다음과 같이 할 수 있습니다.
fun main() {
val mutableList: MutableList<String> = mutableListOf<String>("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]
add, removeAt 과 같은 가변형용 멤버 메소드를 사용할 수 있습니다. 가변형에서 사용할 수 있는 메소드는 다음과 같습니다.
멤버 메서드 | 설명 |
---|---|
add(index: Int) | 인자로 전달 받은 요소를 추가하고 true를 반환하며, 이미 요소가 있거나 중복이 허용되지 않으면 false를 반환한다. |
remove(element: E) | 인자로 전달 받은 요소를 삭제하고 true를 반환하며, 삭제하려는 요소가 없다면 false를 반환한다. |
addAll(element: Collection |
컬렉션을 인자로 전달 받아 모든 요소를 추가하고 true를 반환하며, 실패하면 false를 반환한다. |
removeAll(element: Collection |
컬렉션을 인자로 전달 받아 모든 요소를 삭제하고 true를 반환하며, 실패하면 false를 반환한다. |
retainAll(element: Collection |
인자로 전달 받은 컬렉션의 요소만 보유한다. 성공하면 true를 반환하고, 실패하면 false를 반환한다. |
clear()) | 컬렉션의 모든 요소를 삭제한다. |
마치며
읽어주셔서 감사합니다.