많이 접한만큼 익숙한 자료구조이지만, 한번 더 살펴보겠습니다
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에 대해 알아보겠습니다 ☺️
'💡 Kotlin' 카테고리의 다른 글
[Kotlin] Collection 함수 - (1) 원소 변환 및 필터, 특정원소 검색 (0) | 2023.01.12 |
---|---|
[Kotlin] mutable Collection (0) | 2023.01.08 |
[kotlin] Pair (0) | 2023.01.02 |
[Kotlin] apply, let, with, also, run 비교 (Scope Function) (0) | 2022.07.14 |
[Kotlin] 배열 (0) | 2022.07.02 |