ABOUT ME

-

  • Kotlin) 코틀린 Collection - List, Map, Set 사용법
    Kotlin 2020. 12. 15. 23:37

     

    코틀린의 Collection

    • 코틀린의 Collection은 Mutable(가변의), Immutable(불변의)을 제공합니다.
    • Mutable은 데이터의 추가, 삭제가 가능합니다.
    • Immutable은 데이터의 수정이 불가합니다.

    List

    기본적으로 Immutable ListlistOf<Type>(Data) 형태와 Mutable ListmutableListOf<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 SetsetOf<Type>(Data) 와 Mutable SetmutableSetOf<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 MapmapOf<key type, value type>(Data)

    Mutable MapmutableMapOf<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 - Collections 소개 및 사용법 정리 (List, Map, Set)

    반응형

    댓글

Designed by Me.