<Kotlin>Collections

진섭·2021년 12월 29일
0
post-thumbnail
post-custom-banner

📌Collections이란?

List,Set,Map으로 구성되어 있으며 기초적인 자료구조를 할수있는 Kotlin 표준 라이브러리이다.
컬렉션 유형도 두가지로 형식으로 나뉘어진다 한다. 불변 컬렉션,가변 컬렉션 말 그대로 바뀌지 않은 컬렉션과 바뀔 수 있는 컬렉션이다.

✔ Collections 유형표

컬렉션 유형불변가변
ListlistOf(), listOf()mutableListOf(), arrayListOf(),ArrayList()
SetsetOf()hashSetOf(), mutableSetOf()
MapmapOf()HashMap, hashMapOf(), mutableMapOf()

참고 : https://www.javatpoint.com/kotlin-collections

✔ Collections 기능

  • List : 배열과 유사하며 중복을 허용하고 순서를 중요시한다.
  • Set : List와 다르게 중복을 허용하지 않고 순서가 없다 즉 고유한 요소의 모음이다.
  • Map : key-value(키- 값)으로 이루어져 있으며 키는 중복이 안되며 값은 중복을 허용한다.

✔ Kotlin 컬렉션 인터페이스의 다이어그램

코틀린 공식문서에서 가져온 최상위부터 하위 까지 상속관계를 표현한 인터페이스의 다이어그램이다.

출처 : 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)
post-custom-banner

0개의 댓글