-
Kotlin) 코틀린 Collection - List, Map, Set 사용법Kotlin 2020. 12. 15. 23:37
코틀린의 Collection
- 코틀린의 Collection은 Mutable(가변의), Immutable(불변의)을 제공합니다.
- Mutable은 데이터의 추가, 삭제가 가능합니다.
- Immutable은 데이터의 수정이 불가합니다.
List
기본적으로 Immutable List의 listOf<Type>(Data) 형태와 Mutable List의 mutableListOf<Type>(Data) 형태로 선업합니다.
코틀린은 타입 추론을 하기 때문에 Type이 생략 가능합니다. (변수 타입 생략 가능)
또한 스마트 캐스팅을 통해 컴파일과 동시에 타입이 결정됩니다. (자동으로 타입 캐스팅)
Usage
// List val fruits = listOf("apple", "banana", "kiwi") println("fruits.size: $fruits.size") println("fruits[1]: $fruits[1]") println("fruits.indexOf(\"apple\") : ${fruits.indexOf("apple")}") // MutableList val exercise = mutableListOf("soccer", "baseball", "basketball") exercise.remove("soccer") exercise.add("swimming") println("exercise: $exercise") exercise.addAll(listOf("running", "jogging")) println("exercise: $exercise") exercise.removeAt(exercise.size - 1) println(exercise)
Result
fruits.size: [apple, banana, kiwi].size fruits[1]: [apple, banana, kiwi][1] fruits.indexOf("apple") : 0 exercise: [baseball, basketball, swimming] exercise: [baseball, basketball, swimming, running, jogging] [baseball, basketball, swimming, running]
Set
Set은 Java와 마찬가지로 데이터의 중복이 불가능, 순서가 정해져 있지 않은 Collection 입니다.
Immutable Set의 setOf<Type>(Data) 와 Mutable Set의 mutableSetOf<Type>(Data)로 선언합니다.
Usage
// Set val numbers = setOf(33, 22, 11, 11, 3) println("numbers : $numbers") println("numbers.size : ${numbers.size}") println("numbers.contains(3) : ${numbers.contains(3)}") println("numbers.isEmpty() : ${numbers.isEmpty()}") // MutableSet val num = mutableSetOf(1, 2, 3, 3, 5) println("num:$num") num.add(6) num.remove(1) println("num:$num") num.removeIf { it < 10 } println(num)
Result
numbers : [33, 22, 11, 3] numbers.size : 4 numbers.contains(3) : true numbers.isEmpty() : false num:[1, 2, 3, 5] num:[2, 3, 5, 6] []
Map
Map은 Java와 마찬가지로 key, value가 쌍으로 지정되어 저장하는 Collection입니다.
key는 중복이 불가능하고 value는 중복이 가능합니다.
Immutable Map의 mapOf<key type, value type>(Data)와
Mutable Map의 mutableMapOf<key type, value type>(Data)로 선언합니다.
또한 Pair객체에 key, value를 넣어 선언도 가능합니다.
infix 키워드를 사용하여 중위 표현으로 사용 가능합니다.
Usage
// Map val numbersMap = mapOf( "1" to "one", "2" to "two", "3" to "three") println("numbersMap:$numbersMap") // Pair val numbersMap2 = mapOf(Pair("1", "one"), Pair("2", "two"), Pair("3", "three")) println("numbersMap:$numbersMap2") println("numbersMap.values: ${numbersMap.values}") println("numbersMap.keys : ${numbersMap.keys}") // MutableMap val mutableMap = mutableMapOf(1 to "one", 2 to "two", 3 to "three") mutableMap[4] = "four" println("mutableMap : $mutableMap") mutableMap.remove(4) println("mutableMap : $mutableMap") mutableMap.clear() println("mutableMap : $mutableMap")
Result
numbersMap:{1=one, 2=two, 3=three} numbersMap:{1=one, 2=two, 3=three} numbersMap.values: [one, two, three] numbersMap.keys : [1, 2, 3] mutableMap : {1=one, 2=two, 3=three, 4=four} mutableMap : {1=one, 2=two, 3=three} mutableMap : {}
Iterator, for, forEach
Collection에 저장되어 있는 요소들을 읽어오는 Iterator 반복자,
List에서 사용하는 ListIterator (양방향 지원합니다),
데이터의 추가, 삭제가 가능한 Mutable ListIterator,
반복문 for문과 향상된 반복문 forEach도 제공합니다.
Usage
// Iterator val iterator = numbers.iterator() while (iterator.hasNext()) { println(iterator.next()) } // ListIterator val listIterator = fruits.listIterator() while (listIterator.hasNext()) { println(listIterator.next()) } while (listIterator.hasPrevious()) { println(listIterator.previous()) } // Mutable ListIterator val mutableListIterator = exercise.listIterator() mutableListIterator.next() mutableListIterator.remove() mutableListIterator.add("balling") mutableListIterator.next() mutableListIterator.set("ski") // for for (x in numbers) { println(x) } // forEach (numbers).forEach { it -> println(it) }
Reference
반응형'Kotlin' 카테고리의 다른 글
Kotlin) 코틀린 inner 클래스 알아보기 (0) 2020.12.18 Kotlin) 코틀린 infix 키워드 알아보기 (0) 2020.12.15 Kotlin) inline 함수와 고차함수 알아보기 (0) 2020.12.15 Kotlin) 코틀린 ::class.java와 리플렉션(Reflection) (0) 2020.12.14 Kotlin) 코틀린 안드로이드 익스텐션 폐기 - Android Kotlin Extensions Will be removed in a future (0) 2020.12.08