•
가변 컬렉션은 컬렉션의 내용을 변경하는 작업을 지원한다.
요소 추가
val numbers = mutableListOf(1, 2, 3, 4)
numbers.add(5)
println(numbers)
Kotlin
복사
•
List나 Set에 단일 요소를 추가하려면 add() 함수를 사용한다.
•
지정된 객체는 컬렉션의 끝에 추가된다.
val numbers = mutableListOf(1, 2, 5, 6)
numbers.addAll(arrayOf(7, 8))
println(numbers)
numbers.addAll(2, setOf(3, 4))
println(numbers)
Kotlin
복사
•
addAll() 은 인수로 전달된 객체의 모든 요소를 List나 Set에 추가한다.
•
인수는 Iterable, Sequence 또는 Array 일 수 있다.
•
수신 객체와 인수의 타입은 다를 수 있다.
•
List에서 addAll() 을 호출하면 인수 컬렉션의 요소가 인수에 있는 순서대로 추가된다.
•
첫 번째 인수로 요소 위치를 지정하여 addAll() 을 호출할 수 있다.
•
인수 컬렉션의 첫 번째 요소는 지정된 위치에 삽입되며 나머지 요소는 그 뒤에 추가되어 수신 객체의 요소가 끝으로 밀려난다.
val numbers = mutableListOf("one", "two")
numbers += "three"
println(numbers)
numbers += listOf("four", "five")
println(numbers)
Kotlin
복사
•
+= 연산자의 제자리 버전인 plusAssign 을 사용하여 요소를 추가할 수 있다.
•
가변 컬렉션에 적용하면 +=는 두 번째 피연산자(단일 요소 또는 다른 컬렉션)를 컬렉션의 끝에 추가한다.
요소 제거
val numbers = mutableListOf(1, 2, 3, 4, 3)
numbers.remove(3) // 첫 번째 '3'을 제거
println(numbers)
numbers.remove(5) // 아무 것도 제거하지 않음
println(numbers)
Kotlin
복사
•
가변 컬렉션에서 요소를 제거하려면 remove() 함수를 사용한다.
•
remove() 는 요소 값을 받아 그 값의 첫 번째 발생을 제거한다.
val numbers = mutableListOf(1, 2, 3, 4)
println(numbers)
numbers.retainAll { it >= 3 }
println(numbers)
numbers.clear()
println(numbers)
val numbersSet = mutableSetOf("one", "two", "three", "four")
numbersSet.removeAll(setOf("one", "two"))
println(numbersSet)
Kotlin
복사
•
여러 요소를 한 번에 제거하려면 다음 함수들을 사용할 수 있다.
◦
removeAll()
▪
인수 컬렉션에 있는 모든 요소를 제거한다.
▪
이 함수를 조건자와 함께 호출할 수 있으며 이 경우 조건자가 true를 반환하는 모든 요소를 제거한다.
◦
retainAll()
▪
removeAll()의 반대로 인수 컬렉션에 없는 모든 요소를 제거한다.
▪
조건자와 함께 사용하면 조건에 맞는 요소만 남긴다.
◦
clear()
▪
모든 요소를 제거하고 빈 컬렉션으로 만든다.
val numbers = mutableListOf("one", "two", "three", "three", "four")
numbers -= "three"
println(numbers)
numbers -= listOf("four", "five")
//numbers -= listOf("four") // 위와 동일한 작업
println(numbers)
Kotlin
복사
•
-= 연산자(제자리 버전의 minus)를 사용하여 요소를 제거할 수 있다.
•
두 번째 인수는 단일 요소나 다른 컬렉션일 수 있으며 오른쪽 피연산자가 단일 요소일 경우 그 값의 첫 번째 발생을 제거하고 컬렉션일 경우 해당 컬렉션에 있는 모든 요소가 제거된다.
•
컬렉션에 중복된 요소가 있는 경우 한 번에 모두 제거된다.
•
두 번째 피연산자가 컬렉션에 없는 요소를 포함할 수 있으며 이러한 요소는 작업 실행에 영향을 미치지 않는다.
요소 업데이트
•
List와 Map은 요소를 업데이트할 수 있는 작업을 제공한다.
•
Set의 경우 업데이트는 실제로 요소를 제거하고 다른 요소를 추가하는 것이기 때문에 의미가 없다.