본문 바로가기
💡 Kotlin

[Kotlin] Collection (List, Set, Map)

by 콩드로이드 2023. 1. 3.

많이 접한만큼 익숙한 자료구조이지만, 한번 더 살펴보겠습니다 


Collection

자료구조 중 하나로, 크게 3가지 컬렉션이 있습니다 (List, Set, Map)

 

 

 

List와 Set은 Collection을 상속받고, Map은 독자적입니다 

 

 

간단히 3가지의 특징, 생성법에 대해 알아보자면,

 

List  : 순서 O    

val list: Collection<List> = listOf(1,2,3)

 

Set : 순서  X, 중복  X

val set: Collection<Int> = setOf(9,8,7)

 

Map : [키-값]의 형태 , 키는 중복 X

 

val map: Map<String, Int> = mapOf("First" to 0, "Second" to 1)

 

 


Collection Interface

 

interface Collection<out E> : Iterator<E>

 

Collection의 Property

﹒size : 컬렉션에 포함된 원소의 개수

 

 

Collection의 함수

isEmpty() : 컬렉션이 비어있는지 여부 반환

 

contains(element: E): Boolean

    - 컬렉션에 element의  포함여부를 반환 

 

containsAll(elements: Collection<E>: Boolean

    - 컬렉션에 모든 elements 원소들이 포함되어있는지 여부를 반환

 

abstract fun iterator(): Iterator<E>

    - 반복자 타입의 객체로 반환 , 반복문에서 in 연산자를 사용할 수 있게 해줌 

 

fun main() {
   val list : Collection<Int> = listOf(1,5,9,3)
   
   println(list.size)
   println(list.isEmpty())
   println(12 in list)
   for(i in list){
      print("$i ")
   }
}

 

테스트 결과 

더보기

4

false

false 

1 5 9 3

 


자, 이제 Collection에 대해 파악했으니 List, Set, Map에 대해서도 차근차근 알아볼까욧 🔍

 

List

 

List는 Collection을 상속하고 있기 때문에 아래와 같은 형태를 가집니다

interface List<out E>: Collection<E>

 

🛠 List의 함수

• get

abstract operator fun get(index: Int): E

List의 index 번째 원소를 반환하는 함수입니다 [] 이렇게 쓰이기도 하죠 :)

 

• indexOf

abstract fun indexOf(element: E): Int

List의 element 원소가 몇번째 index에 위치해있는지 반환하는 함수입니다 

 

if(List내에 원소가 없다면) return -1 

else return 위치해있는 첫번재 index 

 

• lastIndexOf

abstract fun lastIndexOf(element: E): Int

indexOf의 자매품입니다 나머지는 indexOf와 동일하되,  원소가 위치해있는 마지막 인덱스를 반환합니다 

 

• listIterator

abstract fun listIterator(): ListIterator<E>
abstract fun listIterator(index: Int): ListIterator<E>

ListIterator를 반환하는 함수로, index를 지정하면 해당 index부터 시작하는 *ListIterator를 반환합니다 

 

*ListIterator

더보기

*ListIterator란?

  List에 특화된 Iterator

 

ListIterator은 Iterator를 구현한 인터페이스로, Iterator<T>의 멤버 외 추가로 갖는 멤버들이 존재합니다 

hasPrevious() : 이전 원소의 존재여부 반환

previous() : 이전 원소를 반환하고, ListIterator의 커서를 뒤로 한 칸 이동

nextIndex() : 다음 원소의 인덱스 반환 (커서이동X)

perviousIndex(): 이전 원소의 인덱스 반환(커서이동X)

 

• subList

abstract fun subList(fromIndex:Int, toIndex: Int): List<E>

List에서 [fromIndex, toIndex) 구간의 원소를 뽑아 새로운 List를 만들어 반환하는 함수

 

 

 


Set은 List와 달리 Collection 외 추가 멤버가 없습니다

중복이 존재하지 않는다는 점만 알아두면 좋을 거 가타요 ☺️

 


 

Map

Collection을 상속받지 않는 독자적인 형태입니다 

[키-값]의 형태로 한쌍을 이룹니다 

interface Map<K, out V>

 

Map의 Property

• size

Map에 들어있는 [키-값]의 개수를 가집니다

 

• Entry

Entry는 키와 값 한쌍을 나타냅니다

interface Entry(out K, out V)

 

 

• entries

Map의 모든 Entry를 가집니다

abstract val entries: Set<Map.Entry<K, V>>

 

• keys

Map의 키값들만 가지고, 키는 중복이 불가능하므로 Set타입

abstract val keys: Set<K>

 

• values

Map의 값들만 가지고 중복이 가능합니다 

abstract val values : Collection<V>

 

 

🛠 Map의 함수

• isEmpty() : Map이 비어있는지 여부를 반환

• containsKey

Map에 key에 해당하는 키가 있는지 여부를 반환

abstract fun containsKey(key: K): Boolean

 

• containsValue

Map에 value에 해당하는 값이 있는지 여부를 반환

abstract fun containsValue(value: V): Boolean

 

• get

key에 해당하는 값을 반환, key에 해당하는 값이 없으면 Null 반환

List와 마찬가지로 [] 연산자가 사용가능케함

abstract operator get(key: K) : V?

만약, 값이 없을 때 null 반환되는게 싫다면?

 

• getOrDefault

값이 없을 땐 지정해둔 defaultValue가 반환된다

abstract fun getOrDefault(key: K, defaultValue: V): V

 

 


오늘 알아본 List, Set,Map은 원소를 추가하거나 삭제하는 함수가 없었다는 사실을 눈치채셨나요?😀 

Collection Interface는 원소를 수정할 수 있는 방법을 제공하지 않기 때문에 'MutableCollection'으로 변경해 진행해야해요!

 

다음 포스팅은 MutableCollection에 대해 알아보겠습니다 ☺️