[android : kotlin] 코틀린 Collection 함수 예제 및 총정리( List, Map, Set 예제 코드)
코틀린 Collection 함수
Collection 함수에 대해 알아 보자. “데이터를 저장하기 위해 사용한다” 라고 생각하면 쉽다. 크게 List, Map, Set으로 나눌 수 있다. List는 기본적으로 변경이 불가능한(Immutable) 방식이다. 읽기 전용(read-only)이다. Set 역시 변경이 불가능한 방식이며, 읽기 전용이다. setOf() 메서드를 사용하여 생성한다. Map은 키(key) 와 값(value)으로 이루어진 쌍의 데이터를 관리하기 위해 사용한다. 키(key)는 중복될 수 없다. Map 역시 변경이 불가능한 방식이며, 읽기 전용이다. mapOf()메서드를 사용하여 생성할 수 있다.
컬렉션 타입 (Collection types)
- 비어있는 컬렉션
emptyList, emptyMap, emptySet - 읽기 전용 컬렉션 : immutable(불변)
listOf, mapOf, setOf - 변경 가능한 컬렉션 : mutable(가변)
mutableListOf, mutableMapOf, mutableSetOf, arrayListOf - 다른 소스를 첨가할 수 있는 빌드 컬렉션
buildList, buildMap, buildSet - Linked 컬렉션
linkedMapOf, linkedSetOf( 더보기 stackOverflow) - 정렬된 컬렉션
sortedMapOf, sortedSetOf(더보기 stackOverflow) - Hash 컬렉션
hashMapOf, hashSetOf(더보기 stackOverflow) - 프로그래밍 방식으로 컬렉션 만들기
List, MutableList, Iterable
■ List 예제를 살펴보자
fun main() { val list5 : List<Int> = listOf(1,2,3,4,5,4,3,1) println(list5) println("list5 사이즈 : ${list5.size}") for(i in 0 until list5.size) { println("list5[${i}]=${list5[i]}") } }
[실행결과]
[1, 2, 3, 4, 5, 4, 3, 1] list5 사이즈 : 8 list5[0]=1 list5[1]=2 list5[2]=3 list5[3]=4 list5[4]=5 list5[5]=4 list5[6]=3 list5[7]=1
리스트의 합을 구하는 예제이다. sum()메서드를 이용하였다.
fun main() { var list0 = listOf<Int>(1, 2, 3, 4, 5, 6, 7, 8, 9, 10).map { it * 2 }.sum() var list2 = listOf<Int>(1, 2, 3, 4, 5, 6, 7, 8, 9, 10).sum() println(list0) println(list2) }
[실행결과]
110 55
다음 예제는 람다식을 사용하여 리스트의 값을 1부터 10으로 초기화 하였다.
fun main() { val list4 : List<Int> = List(10, {i->i+1}) println(list4) }
[실행결과]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
읽기 전용 타입이기 때문에 값을 변경하려고 할 때 오류가 발생된다. 값을 변경하고자 할 경우에는 MutableList, ArrayList를 사용하면 된다. 그러나 val로 선언한다면 값을 변경할 수 없으니 참고 하자.
MutableList 예제를 살펴보자.
//비어 있는 리스트로 초기화 val list = mutableListOf<String>() val list2: MutableList<String> = mutableListOf("apple", "orange", "peach")
fun main() { //빈 리스트로 초기화 //val list = mutableListOf<String>() val list: MutableList<String> = mutableListOf("apple", "orange", "peach") list.add("grape") //참조가 변경되는 것은 아니다. list.addAll(listOf("banana","pineapple")) println(list) println("list 사이즈 : ${list.size}") // val 리스트를 다시 할당하려고 함으로 컴파일 오류가 발생한다. // var를 사용하려 리스트를 정의하면 오류는 사라진다. //var list = mutableListOf<String>() //list = mutableListOf("banana", "pineapple") }
[실행결과]
[apple, orange, peach, grape, banana, pineapple] list 사이즈 : 6
ArrayList 예제를 살펴보자
fun main() { val list: ArrayList<String> = arrayListOf("apple", "orange", "peach") list.add("grape") //참조가 변경되는 것은 아니다. list.addAll(listOf("banana","pineapple")) println(list) println("list 사이즈 : ${list.size}") list.remove("apple") println(list) list.removeAt(0) //index println(list) // val 리스트를 다시 할당하려고 함으로 컴파일 오류가 발생한다. // var를 사용하려 리스트를 정의하면 오류는 사라진다. //list = arrayListOf("banana", "pineapple") }
[실행결과]
[apple, orange, peach, grape, banana, pineapple] list 사이즈 : 6
[orange, peach, grape, banana, pineapple]
[peach, grape, banana, pineapple]
■ Set 예제를 살펴보자
Set은 중복되는 값을 허용하지 않는다. 중복되는 값이 들어오면 알아서 제거하고 하나의 값만 남긴다.
fun main() { val setData: Set<Int> = setOf<Int>(1,2,1,1,2,3,4,5) println(setData) println("setData 사이즈 : ${setData.size}") }
[출력결과]
[1, 2, 3, 4, 5] setData 사이즈 : 5
MutableSet 예제를 살펴보자
fun main() { val list: MutableSet<String> = mutableSetOf("apple", "orange", "peach") list.add("grape") //참조가 변경되는 것은 아니다. list.addAll(listOf("banana","pineapple")) println(list) println("list 사이즈 : ${list.size}") list.remove("apple") println(list) }
[실행결과]
[apple, orange, peach, grape, banana, pineapple] list 사이즈 : 6 [orange, peach, grape, banana, pineapple]
HashSet 예제를 살펴보자
fun main() { val list: HashSet<String> = hashSetOf("apple", "orange", "peach") list.add("grape") //참조가 변경되는 것은 아니다. list.addAll(listOf("banana","pineapple")) println(list) println("list 사이즈 : ${list.size}") list.remove("apple") println(list) }
[실행결과]
[orange, peach, banana, apple, grape, pineapple] list 사이즈 : 6 [orange, peach, banana, grape, pineapple]
LinkedHashSet 예제를 살펴보자. 자료구조 상으로 볼 때 포인터를 통하여 다음 데이터와 연결되어 있음으로 메모리 저장 공간을 좀 더 효율적으로 사용한다.
fun main() { val list: LinkedHashSet<String> = linkedSetOf("apple", "orange", "peach") list.add("grape") //참조가 변경되는 것은 아니다. list.addAll(listOf("banana","pineapple")) println(list) println("list 사이즈 : ${list.size}") list.remove("apple") println(list) }
[실행결과]
[apple, orange, peach, grape, banana, pineapple] list 사이즈 : 6 [orange, peach, grape, banana, pineapple]
■ Map 예제를 살펴보자
키 값으로 알파벳 a,b,c,d,e가 사용되었다. 그럼으로 get()메서드 사용시 키값으로 “a”를 대입하여 1이라는 값을 가져올 수 있다.
fun main() { val map1: Map<String, Int> = mapOf("a" to 1, "b" to 2, "c" to 3, Pair("d", 4), Pair("e",5)) println(map1.get("a")) println(map1.get("d")) println("map1 사이즈 : ${map1.size}") }
[실행결과]
1 4 map1 사이즈 : 5
MutableMap 예제를 살펴 보자
fun main() { val list: MutableMap<String, Int> = mutableMapOf("apple" to 1, "orange" to 2, "peach" to 3) list.put("grape", 4) //참조가 변경되는 것은 아니다. list.putAll(mutableMapOf("banana" to 5,"pineapple" to 6)) println(list) println("list 사이즈 : ${list.size}") list.remove("apple") println(list) list["peach"] = 22 println(list) }
[실행결과]
{apple=1, orange=2, peach=3, grape=4, banana=5, pineapple=6} list 사이즈 : 6 {orange=2, peach=3, grape=4, banana=5, pineapple=6} {orange=2, peach=22, grape=4, banana=5, pineapple=6}
■컬렉션 변환
- 배열 타입으로
toBooleanArray, toByteArray, toCharArray, toDoubleArray, toFloatArray, toIntArray, toLongArray, toShortArray, toTypedArray, toUByteArray, toUIntArray, toULongArray, toUShortArray - 읽기 전용 컬렉션으로
toList, toMap, toSet - 변경 가능한 컬렉션으로
toMutableList, toMutableMap, toMutableSet, toHashSet - 정렬된 컬렉션으로
toSortedMap, toSortedSet - 엔트리를 쌍으로 변환
toPair - 맵을 프로퍼티로 변환
toProperties
[REFERENCE]
kotlinlang.org/docs/reference/collections-overview.html
medium.com/hongbeomi-dev/kotlin-collection-%ED%95%A8%EC%88%98-7a4b1290bce4
[코틀린 더 알아보기]
[android : kotlin] 코틀린 lateinit, lazy 사용방법 및 예제
[android : kotlin] 코틀린 JSON 객체 파싱하는 방법 및 RecyclerView 아이템 추가 및 삭제방법 : Assets폴더 내에 json파일 파싱방법
[android : kotlin] 코틀린 웹뷰(WebView) 사용 설정 방법 및 예제 총정리