List
,Set
,Map
으로 구성되어 있으며 기초적인 자료구조를 할수있는 Kotlin 표준 라이브러리이다.
컬렉션 유형도 두가지로 형식으로 나뉘어진다 한다. 불변 컬렉션
,가변 컬렉션
말 그대로 바뀌지 않은 컬렉션과 바뀔 수 있는 컬렉션이다.
컬렉션 유형 | 불변 | 가변 |
---|---|---|
List | listOf(), listOf() | mutableListOf(), arrayListOf(),ArrayList() |
Set | setOf() | hashSetOf(), mutableSetOf() |
Map | mapOf() | HashMap, hashMapOf(), mutableMapOf() |
코틀린 공식문서에서 가져온 최상위부터 하위 까지 상속관계를 표현한 인터페이스의 다이어그램이다.
출처 : https://kotlinlang.org/docs/collections-overview.html#collection-types
🍜 List
fun main() {
val numbers = listOf("one", "two", "three", "four")
println("요수의 갯수: ${numbers.size}")
println("세 번째 요소: ${numbers.get(2)}")
println("네 번째 요소: ${numbers[3]}")
println("\"two\" 요소의 인덱스는 ${numbers.indexOf("two")}")
}
실행결과
요수의 갯수: 4
세 번째 요소: three
네 번째 요소: four
"two" 요소의 인덱스는 1
//List는 중복을 허용한다.(null 포함)
data class Person(var name: String, var age: Int)
fun main() {
val bob = Person("Bob", 31)
val people = listOf(Person("Adam", 20), bob, bob)
val people2 = listOf(Person("Adam", 20), Person("Bob", 31), bob)
println(people == people2)
bob.age = 32
println(people == people2)
}
실행결과
true
false
fun main() {
val numbers = mutableListOf(1, 2, 3, 4)
numbers.add(5)
numbers.removeAt(1)//removeAt : ArrayList에서 특정 인덱스 값을 삭제할때 사용
numbers[0] = 0
numbers.shuffle()//shuffle(): List의 값을 임의로 섞는다.
println(numbers)
}
실행결과
[3, 0, 5, 4] //shuffle()로 인해 실행결과가 달라짐
🍜 Set
순서를 정의하지 않는고유한 요소를 저장한다.(null도 고유한 set)
두 집합은 크기가 같으면 동일
fun main() {
val numbers = setOf(1, 2, 3, 4)
println("요소의 갯수: ${numbers.size}")
if (numbers.contains(1)) println("1 이 집합에 있음")//contains: 찾는 문자가 있는지 확인
val numbersBackwards = setOf(4, 3, 2, 1)
println("The sets are equal: ${numbers == numbersBackwards}")
}
실행결과
요소의 갯수: 4
1 이 집합에 있음
두 집합이 동일한가: true
fun main() {
val numbers = setOf(1, 2, 3, 4) // Set의 기본 구현은 요소 삽입 순서를 유지하는 LinkedHashSet형태로
되어 있다. 그렇기 때문에 first(),last()와 같은 메소드로 인덱싱이 가능
val numbersBackwards = setOf(4, 3, 2, 1)
println(numbers.first() == numbersBackwards.first())// 1 == 4
println(numbers.first() == numbersBackwards.last())// 1 == 1
}
실행결과
false
true
🍜 Map
fun main() {
val numbersMap = mapOf("key1" to 1, "key2" to 2, "key3" to 3, "key4" to 1)
println("모든 키: ${numbersMap.keys}")
println("모든 값: ${numbersMap.values}")
if ("key2" in numbersMap) println("\"key2\"의 값은: ${numbersMap["key2"]}")
if (1 in numbersMap.values) println("값 1은 Map 에 있습니다.")
if (numbersMap.containsValue(1)) println("값 1은 Map 에 있습니다.")
}
실행결과
모든 키: [key1, key2, key3, key4]
모든 값: [1, 2, 3, 1]
"key2"의 값은: 2
값 1은 Map 에 있습니다.
값 1은 Map 에 있습니다.
// 두 Map은 동일한 쌍을 포함하는 두 개의 Map은 순서와 상관없이 동일
fun main() {
val numbersMap = mapOf("key1" to 1, "key2" to 2, "key3" to 3, "key4" to 1)
val anotherMap = mapOf("key2" to 2, "key1" to 1, "key4" to 1, "key3" to 3)
println("The maps are equal: ${numbersMap == anotherMap}")
실행결과
The maps are equal: true
//Map은 쓰기 작업이 가능하여 새 키 -값 쌍을 추가하거나 변경을 할 수 있다.
val numbersMap = mutableMapOf("one" to 1, "two" to 2)
numbersMap.put("three", 3)
numbersMap["one"] = 11
println(numbersMap)