Collection은 크게 Mutable과 immutable으로 구분된다.
Mutable - read & write 방식
immutable - read only 방식
Collection에는 List, Map, Set 이 있다.
List는 순서를 가지고
Set 동일한 data가 없고 null을 가질 수 있지만, 동일한 객체가 없기 때문에 null또한 1개만 가진다.
Map은 key와 value를 짝지어 저장한다. key를 동일하게 가질 수 없다.
이중에 List를 정리하고자 한다.
List의 선언 방식은 아래와 같다.
val list: List<Int> = List(3, {i -> i})
val list: List<Int> = listOf(0, 1, 2)
위와 같이 선언할 수 있고 이 결과는 0 ~ 2가 list에 할당되어 객체가 생성된다.
immutable 때문에 위와 같이 list가 선언된 경우 아래와 같이 수정이 불가능하다.
list[0] = 4
mutable List의 선언 방식은 아래와 같다.
val list = MutableList<Int>(3, {i -> i})
val list = mutableListOf<Int>(0, 1, 2)
위와 같이 선언할 수 있고 이 결과는 0 ~ 2가 list에 할당된다.
위의 immutable list와는 다르게 mutable 리스트는 아래와 같이 수정이 가능하다.
list[0] = 4 // index 0번 데이터 4로 변경
list.set(0, 4) // index 0번 데이터 4로 변경
add
list.add(3) // 끝에 3 추가
list.add(1, 11) // idx 1번에 11 데이터 추가
val list2 = listOf<Int>(7, 8, 9)
list.addAll(list2) // 기존 list에 list2의 값들을 더한다.
list.addAll(2, list2) // 기존 list의 idx2에 list2의 값들을 더한다.
remove
val mullist = MutableList<Int>(3, {i -> i}) // (0, 1, 2)
mullist.remove(2) // (0, 1)
mullist.removeAt(1) // (0)
val list = listOf<Int>(60, 1, 2, 0)
mullist.removeAll(list) //
list.clear() // ()
remove의 경우 해당 값을 찾아 삭제하고 true를 반환한다.
해당 값이 없을 때는 수정하지 않고 false를 반환합니다.
removeAll의 경우 Collection을 인자로 받고 인자의 요소 중 일치하는 값이 있으면 해당 값들을 삭제하고 true를 반환합니다. 없으면 마찬가지로 false를 반환합니다.
removeAt은 인자로 받은 값의 index에 위치하는 값을 삭제합니다.
clear는 list를 비웁니다.
retainAll
val mullist = MutableList<Int>(3, {i -> i})
val list = listOf<Int>(4, 5, 0, 2)
mullist.retainAll(list) // (0, 2)
retainAll 함수는 두개의 Collection에서 공통인 요소만 남깁니다.
subList
val mullist = MutableList<Int>(4, {i -> i})
val list = mullist.subList(0, 2) // (0, 1, 2)
위의 경우 idx 0부터 idx 2까지 mullist를 잘라 Collection을 반환합니다.
iterator
val iter = list.iterator() // list의 첫 번째 원소
while(iter.hasNext()){
println(iter.next())
}
iterator 함수는 생성 후 리스트의 첫 번째 원소를 가리킨다.
hasNext 함수는 iterator가 가리킬 다음 원소의 존재 여부를 확인한다.
next 함수는 현재 원소를 return 후 다음 원소를 가리킨다.
distinct
val list = mutableListOf<Int>(0, 1, 2, 2, 3, 4, 5, 5, 6, 7) // 0, 1, 2, 2, 3, 4, 5, 5, 6, 7
val distinctList = list.distinct() // (0, 1, 2, 3, 4, 5, 6, 7)
distinct 함수는 중복된 데이터를 제거해준다.
내부적으로 toMutableSet().toList()를 동작한다.
Set으로 변경해 중복된 데이터를 제거하고 List로 다시 변환하여 return한다.
mutable list에는 arraylist와 mutablelist가 있다.
list를 mutable하게 사용하고 싶은 경우 둘 다 사용해도 된다.
현재 kotlin은 arraylist와 mutablelist 둘 다 반환을 arraylist를 반환하기 때문이다.