본문 바로가기
프로그래밍/Kotlin

Kotlin] MutableList 기능 설명

by Hwan2 2020. 7. 19.
728x90
반응형

1. MutableList

Kotlin의 List에는 List와 MutableList가 있습니다.
List는 읽기 전용이며 MutableList는 읽기/ 쓰기가 가능합니다.

Kotlin에선 List인 listOf의 사용을 권장하고 있습니다. (코드의 선명함과 안정성 때문에)
하지만 동적으로 할당되는 배열을 활용하기 위해서 MutableList를 사용해야 합니다.

2. MutableList 기능

1) init

fun main() {
val mulist1: MutableList<Int> = mutableListOf(10, 20, 11, 23, 55)
val mulist2 = mutableListOf(10, 20, 30);
val mulist3 = (1..50).toMutableList()
val mulist4 = mutableListOf<Int>()
val mulist5 = MutableList<Int>(5, { i -> i}) // 0..4로 초기화
}


2) add, addAll

fun main() {
val mulist: MutableList<Int> = mutableListOf<Int>(10, 20, 11, 23, 55)

mulist.add(500) //output : 10, 20, 11, 23, 55, 500
mulist.add(3, 111) //output : 10, 20, 11, 111, 23, 55, 500

val list = listOf<Int>(1, 2, 3)
mulist.addAll(2, list) //output : 10, 20, 1, 2, 3, 11, 111, 23, 55, 500
}

add를 실행하게 되면 뒤에 붙여지게 됩니다.

또한 중간위치에 삽입도 가능합니다.


addAll은 collection을 중간에 끼워넣을 수 있습니다.



3) clear

fun main() {
val mulist: MutableList<Int> = mutableListOf(10, 20, 11, 23, 55)
mulist.clear() //output : null
}

MutableList요소 삭제



4) iterator, listIterator

fun main() {
val mulist: MutableList<Int> = mutableListOf(10, 20, 11, 23, 55)

val it1 = mulist.iterator()
val it2 = mulist.listIterator()

while(it1.hasNext()) println(it1.next()) //output 10, 20, 11, 23, 55)

while(it2.hasNext()) println(it2.next()) //output 10, 20, 11, 23, 55)
}

iterator 반환



5) remove, removeAll

fun main() {
val mulist: MutableList<Int> = mutableListOf(10, 20, 11, 23, 55)

mulist.remove(10) //output : 20, 11, 23, 55
mulist.remove(1000) //output : 20, 11, 23, 55

val list: List<Int> = listOf<Int>(1, 2, 3, 20)
mulist.removeAll(list) //output : 11, 23, 55
}

배열에 해당 요소값을 찾아 삭제합니다. 또한 true를 반환합니다.

해당 요소값이 없을땐 값을 유지하며 false를 반환합니다.


removeAll은 Collection을 인자로 전달 받으며 전달받은 Collection의 요소중 하나라도 일치하는 값이 있으면

삭제하고 true를 반환합니다. 없다면 false를 반환하게 됩니다.


6) removeAt

fun main() {
val mulist: MutableList<Int> = mutableListOf(10, 20, 11, 23, 55)

mulist.removeAt(0) //output : 20, 11, 23, 55
mulist.removeAt(mulist.size - 1) //output : 20, 11, 23
}

removeAt은 mutableList의 index요소를 전달 받게 됩니다.

그럼 해당 요소에 있는 값을 없에고 빈공간을 없에게 됩니다.



7) retainAll

fun main() {
val mulist: MutableList<Int> = mutableListOf(10, 20, 11, 23, 55)
val list = listOf<Int>(1, 2, 3, 20, 55)
mulist.retainAll(list) //output : 20, 55
}

두개의 Collection에서 공통된 요소를 제외한 나머지 삭제.



8) set

fun main() {
val mulist: MutableList<Int> = mutableListOf(10, 20, 11, 23, 55)

mulist.set(3, 1) //output : 10, 20, 11, 1, 55
mulist[3] = 100 //output : 10, 20, 11, 100, 55
}

set은 첫번째 인자로 index값, 두번째 인자로 element값을 받습니다.

index값에 요소를 해당 인자로 바꾼 후 바뀐 요소를 return하게 됩니다.


아래 [] 방법으로 해도 동일합니다.



9) subList

fun main() {
val mulist: MutableList<Int> = mutableListOf(10, 20, 11, 23, 55)
val sub_mulist = mulist.subList(2, 4)

println(sub_mulist) //output : 11, 23
}

원하는 위치를 잘라 Collection을 반환합니다.



번외) val, var

fun main() {
val mulist1: MutableList<Int> = mutableListOf(10, 20, 11, 23, 55)
var mulist2: MutableList<Int> = mutableListOf(10, 20, 11, 23, 55)

mulist1 = mutableListOf(1, 2, 3) //error
mulist2 = mutableListOf(1, 2, 3) //OK!!
}

val로 선언하든, var로 선언하든 함수의 추가, 삭제는 가능합니다.


하지만 val로 선언된 MutableList는 새로운 MutableList를 전달받을 수 없습니다.

var은 가능하죠.



Kotlin MutableList reference : https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-mutable-list/


 


반응형

댓글


스킨편집 -> html 편집에서