본문 바로가기
Do it 코틀린 프로그래밍

코틀린 컬렉션(3) - Set과 Map 활용하기

by 차누감 2020. 8. 25.

Set는 정해진 순서가 없는 요소들의 집합을 나타내는 컬렉션입니다. 동일한 요소를 중복해서 가질 수 없습니다.

Map은 요소가 키와 값의 쌍의 형태로 저장됩니다. 키는 중복될 수 없고 유일합니다. 하지만 값은 중복해서 사용할 수 있습니다.

 

Set 생성하기

불변형 setOf() 함수

    val mixedTypesSet = setOf("Hello", 5, "World", 3.14, 'c')
    val intSet: Set<Int> = setOf(1,5,5)

    println(mixedTypesSet)  //  [Hello, 5, World, 3.14, c]
    println(intSet) //  [1, 5]

 

가변형 mutableSetOf() 함수

    val animals = mutableSetOf("Lion","Dog","Cat","Python","Hippo")
    println(animals)    //  [Lion, Dog, Cat, Python, Hippo]

    animals.add("Bird")
    println(animals)    //  [Lion, Dog, Cat, Python, Hippo, Bird]

    animals.remove("Python")
    println(animals)    //  [Lion, Dog, Cat, Hippo, Bird]

 

Set의 여러 가지 자료 구조

hashSetOf() 함수

해시 테이블이란 내부적으로 키와 인덱스를 이용해 검색과 변경 등을 매우 빠르게 처리할 수 있는 자료구조입니다.

HashSet는 불변성 선언이 없기 때문에 추가 및 삭제 등의 기능을 수행할 수 있습니다.

 

HashSet 초기화
    val intsHashSet: HashSet<Int> = hashSetOf(6, 3, 4, 7)   //  불변성 기능이 없음
    intsHashSet.add(5)  // 추가
    intsHashSet.remove(6)   //  삭제
    println(intsHashSet)	//	[3, 4, 5, 7]

 

sortedSetOf() 함수

자바의 TreeSet 컬렉션을 정렬된 상태로 반환합니다. TreeSet는 저장된 데이터의 값에 따라 정렬되는데, 일종의 개선된 이진 탐색 트리인 레드 블랙 트리 알고리즘을 사용해 자료구조를 구성합니다.

검색과 정렬이 뛰어나다는 장점과 HashSet보다 성능이 좀 떨어지고 데이터를 추가하거나 삭제하는 데 시간이 걸립니다.

 

TreeSet 초기화
    val insSortedSet: TreeSet<Int> = sortedSetOf(4,1,7,2)
    insSortedSet.add(6)
    insSortedSet.remove(1)
    println("insSortedSet = ${insSortedSet}")   //  insSortedSet = [2, 4, 6, 7]

    insSortedSet.clear()
    println("insSortedSet = ${insSortedSet}")   //  insSortedSet = []

 

linkedSetOf() 함수

자바의 LinkedHashSet 자료형을 반환하는 헬퍼 함수입니다. 자료구조상 다음 데이터를 가리키는 포인터 연결을 통해 메모리 저장 공간을 좀 더 효율적으로 사용할 수 있습니다.

LinkedHashSet 초기화
    //Linked list를 이용한 HashSet
    val intsLinedHashSet: java.util.LinkedHashSet<Int> = linkedSetOf(35, 21, 76, 26, 75)
    intsLinedHashSet.add(6)
    intsLinedHashSet.remove(21)

    println(intsLinedHashSet)   //  [35, 76, 26, 75, 6]
    intsLinedHashSet.clear()
    println(intsLinedHashSet)   //  []

Map의 활용

불변형 mapOf() 함수

 

    val langMap: Map<Int,String> = mapOf(11 to "Java", 22 to "Kotlin", 33 to "C++")
    for((key, value) in langMap){
        println("key=$key, value=$value")
//        key=11, value=Java
//        key=22, value=Kotlin
//        key=33, value=C++
    }
    println("langMap[22] = ${langMap[22]}") 		//  langMap[22] = Kotlin
    println("langMap.get(22) = ${langMap.get(22)}") 	//  langMap.get(22) = Kotlin
    println("langMap.keys = ${langMap.keys}")   	//  langMap.keys = [11, 22, 33]

 

Map에서 사용하는 멤버 프로퍼티와 메서드

멤버 설명
size Map 컬렉션의 크기를 반환한다.
keys Set의 모든 키를 반환한다.
values Set의 모든 값을 반환한다.
isEmpty() Map이 비어 있는지 확인하고 비어있으면 true를, 아니면 false를 반환한다.
containsKey(key: K) 인자에 해당하는 키가 있다면 true를, 없으면 false를 반환한다.
containsValue(value: V) 인자에 해당하는 값이 있다면 true를, 없으면 false를 반환한다.
get(key: K) 키에 해당하는 값을 반환하며, 없으면 null을 반환한다.

 

가변형 mutableMapOf() 함수

    val capitalCityMap: MutableMap<String,String>   //  선언할 때 키와 값의 자료형을 명시할 수 있음
    = mutableMapOf("Korea" to "Seoul", "China" to "Beijing", "Japan" to "Tokyo")
    println(capitalCityMap.values)  //  [Seoul, Beijing, Tokyo]
    println(capitalCityMap.keys)    //  [Korea, China, Japan]

    capitalCityMap.put("UK","London")	//	요소 추가
    capitalCityMap.remove("china")		//	요소 삭제
    println(capitalCityMap) //  {Korea=Seoul, China=Beijing, Japan=Tokyo, UK=London}

 

MutableMap에서 사용하는 멤버 메소드

멤버 설명
put(key: K, value: V) 키와 값의 쌍을 Map에 추가한다.
remove(key: K) 키에 해당하는 요소를 Map에서 제거한다.
putAll(from: Map<out K, V>) 인자로 주어진 Map 데이터를 갱신하거나 추가한다.
clear() 모든 요소를 지운다.

'Do it 코틀린 프로그래밍' 카테고리의 다른 글

코틀린 표준함수 (1)  (0) 2020.09.06
코틀린 시퀀스  (1) 2020.09.05
코틀린 컬렉션(2) - List 활용하기  (0) 2020.08.24
코틀린 컬렉션(1) - 기본 구조  (1) 2020.08.23
코틀린 문자열  (0) 2020.08.22

댓글