코틀린 List, Array 정리

이창민·2021년 12월 2일
0
post-thumbnail

Collection

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

코틀린의 List는 기본적으로 immutable 이다.

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로 선언할 경우 값을 변경할 수 있다.

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로 변경

mutable list 함수 정리

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를 반환하기 때문이다.

profile
android 를 공부해보아요

0개의 댓글