본문 바로가기

Kotlin

컬렉션2 ) 코틀린 컬렉션의 종류소개(List, Set, Map)

 

 

 

 

Collection

 

 Collection<T>는 최상위 클래스로서 read-only 컬렉션들의 동작을 나타내고 있다. ( 사이즈 검색, 아이템 get 등)

Collection은 Iterable<T> 인터페이스를 상속하고 있다. ( Iterable<T>는 컬렉션 요소의 데이터를 하나씩 읽어오는 동작을 정의한 인터페이스다. ) 그리고 Collection 타입을 파라미터로 요구하는 메소드에서 파라미터로 Collection을 상속한 다른 컬렉션을 사용할 수 있다. 

 

 MutableCollection<T> 는 add 와 remove 같은 동작이 가능한 Collection이다.

 

 

 

 

List

 

 List<T>는 특정한 순서로 요소들을 저장하고 그들에게 접근할 수 있는 인덱스를 제공한다.

인덱스는 0부터 시작하고 마지막 인덱스는 (list.size - 1) 과 같다.

 

List에는 null 또한 값으로 들어갈 수 있으며, 요소들은 모두 복제될 수 있다. list는 어떤 숫자건 같은 객체건 

객체 생성자건 들어갈 수 있다. 또 List의 사이즈가 같으면서 같은 postion의 그 구조도 같다면(구성 요소가 같다면) 

같은 object로 간주된다.

 

MutableList<T>는 add와 remove등의 동작을 할 수 있는 list이다. 

보다시피 List는 arrays와 매우 흡사하지만, 한가지 중요한 매우 다른점이 있다. 

array들은 사이즈가 초기화시에 정해지고 그 이후에도 바꿀 수 없지만 리스트는 사이즈가 정의되지 않는다.

그리고 wirte(add, update, remove ..) 의 결과로 사이즈가 얼마든지 바뀔 수 있다.

 

코틀린에서 List의 디폴트구현체는 ArrayList이다. ArrayList는 resizable하다고 생각할 수 있다.

 

 

 

Set

 

 Set<T>는 수학에서 집합과도 같다. 중복된거는 저장할 수 없다. 즉 unique한 요소들만 저장한다. 

흔히 순서가 정의되지 않는다. null또한 unique한 요소로서 들어갈 수 있다.

같은 사이즈를 가지고 요소의 구성이 같은 두 Set객체는 같다고 간주된다. 

 

MutableSet은 MutableCollection으로 부터 상속받은 write동작들을 수행할 수 있는 Set이다.

Set의 기본적인 구현은 LinkedHashSet이다. 이는 요소 추가의 순서를 보존한다. (꼭 그 집합 주머니 같은 형태가 아니다.)

그래서 정의된 함수들은 순서에 의존적이다. first()와 last()같은 함수들이 그렇다. 

 

Set의 또다른 구현으로는 HashSet이 있다. 이는 순서를 보존하지 않기 때문에 HashSet에 관련된 함수는 예상치 못한 결과를 반환한다. 그러나 HashSet은 같은 요소를 보관할때 메모리를 덜 사용한다는 이점이 있다. 

(그 집합배울때 주머니 같은 거다.)

 

 

 

 

Map

 

 Map<K, V> 는 Collection을 상속받지 않았다. 그러나 코틀린의 컬렉션 타입이긴하다.(먼소리)

Map은 key-value 한쌍으로 데이터를 저장한다. key는 unique하여 중복될 수 없지만 각기 다른 key에 같은 value가

저장될 수는 있다. Map 인터페이스는 key로 value에 접근할 수 있는 특정한 함수를 제공한다. 

 

map은 데이터들의 순서를 고려하지 않는다. 그래서 키-값 쌍이 일치한다면 같은 Map객체로 간주된다.

 

MutableMap은 write동작들이 가능한 Map이다. 새로운 키-값 쌍을 추가할 수 있고 키가 주어지면 값을 다른 값으로 update할 수도 있다.

Map의 기본적인 구현은 LinkedHashMap이다. 이는 요소가 추가된 순서를 보존한다. 또 다른 구현으로는 순서를 보존하지 않는 HashMap이 있다. 

 

 

 

 

 

 

 

 

참조 :

https://kotlinlang.org/docs/collections-overview.html 

'Kotlin' 카테고리의 다른 글

랜덤 수 추출 알고리즘  (0) 2021.09.05
컬렉션1 ) 컬렉션 타입과 상속관계  (0) 2021.08.26
Scope Function  (0) 2021.08.21
Kotlin vs Java  (0) 2021.08.21
데이터 타입  (0) 2021.08.19