App노자
[Kotlin] List 본문
1. List란?
List란 순서에 따라 정렬된 요소를 가지는 컬렉션이다
헬퍼함수인 listof()를 사용하여 값을 변경할 수 없는 불변형 List를 만들고 mutableListOf()를 사용해 값을 변경할 수 있는 가변형을 표현한다 불변형 List에서는 인자는 원하는 만큼의 가변 인자를 가지도록 vararg로 선언할 수 있다
https://kotlinlang.org/docs/kotlin-tour-collections.html#list
Collections | Kotlin
kotlinlang.org
2. 불변형 List
fun main() {
var numbers: List<Int> = listOf(1, 2, 3, 4, 5, 1)
var names: List<String> = listOf("one", "two", "three")
for (name in names) {
println(name)
}
for (num in numbers) print(num) // 한 줄에서 처리하기
// List의 기본 멤버 메서드
println(names.indices) //0..2
println(names.size) // 3
println(names.get(0)) // "one"
println(names.indexOf("three")) // 2
println(names.contains("two")) // true
// 여러가지 타입이 병합된 선언
var mixedTypes = listOf("Hello", 1, 2.445, 's')
}
public fun <T> listOf(vararg elements: T): List<T>
불변형 List를 만들 때 사용하는 listOf()의 원형과 작성예시이다
vararg는 가변 인자를 받을 수 있기 때문에 원하는 만큼 요소를 지정할 수 있고 값을 반환할 때는 List<T>를 사용한다
형식 매개변수 <T>는 원하는 자료형을 지정해 선언할 수 있다
서로 다른 자료형을 가진 요소를 합쳐서 선언할 수도 있으며 이 경우와 자료형을 따로 지정하지 않을 경우 <Any>가 기본값이 된다
다양한 기본 멤버 메서드가 존재해 여러 방식으로 활용이 가능하다
val emptyList = emptyList<String>()
비어 있는 List를 생성하려면 emptyList<>()를 사용한다
emptyList를 사용 시에는 반드시 형식 매개변수를 지정해야 한다
val nonNullsList: List<Int> = listOfNotNull(2, 45, 2, null, 5, null)
listOfNotNull()로 초기화하면 null을 제외한 요소만 반환해 List를 구성할 수 있다
null이 아닌 요소만 골라 컬렉션을 초기화한다
fun main() {
val fruits = listOf("apple", "banana", "kiwi")
// 요소만 출력
for (item in fruits) {
println(item)
}
// 인덱스와 함께 출력
for (index in fruits.indices) { // 인덱스 지정
// println("fruits[$index] = ${fruits[index]}")
if (index%2 == 0) println("fruits[$index] = ${fruits[index]}") // 짝수만 고르기
}
// while 루프 이용하기
var index = 0
while (index < fruits.size) {
println("fruits[$index] = ${fruits[index]}")
index++
}
}
List 같은 컬렉션에서 요소를 순환하기 위해 for문아너 while문을 사용한다
요소의 인덱스를 통해 List에 접근하려면 컬렉션에 indices 멤버를 추가한다
3. 가변형 List
//arrayListOf()
fun main() {
// 가변형 List를 생성하고 자바의 ArrayList로 반환
val stringList: ArrayList<String> = arrayListOf<String>("Hello", "Kotlin", "Wow")
stringList.add("Java") // 추가
stringList.remove("Hello") // 삭제
println(stringList)
}
arrayListOf()는 가변형 List를 생성하지만 컴파일 시 반환 자료형은 List가 아닌 자바의 ArrayList이다
가변형이기 때문에 add(), remove()를 통해 요소를 추가하거나 삭제할 수 있다
//mutableListOf()
fun main() {
// 가변형 List의 생성 및 추가, 삭제, 변경
val mutableList: MutableList<String> = mutableListOf<String>("Kildong", "Dooly", "Chelsu")
mutableList.add("Ben") // 추가
mutableList.removeAt(1) // 인덱스 1 삭제
mutableList[0] = "Sean" // 인덱스 0를 변경, set(index: Int, element: E)과 같은 역할
println(mutableList)
// 자료형의 혼합
val mutableMixed = mutableListOf("Android", "Apple", 5, 6, 'X')
println(mutableMixed)
}
mutableList 인터페이스를 사용하는 헬퍼 함수 mutableListOf()를 통해 List의 요소를 추가 삭제 교체 할 수 있다
add(), removeAt()를 통해 요소를 추가하거나 삭제할 수 있으며 set() 혹은 대괄호 표현을 통해 인덱스에 해당되는 요소를 변경할 수 있다
제네릭 표현을 생략하면 여러가지 자료형으로 구성된 mutableList를 할당할수 있다
fun main() {
// 불변형 List를 가변형으로 변환하기
val names: List<String> = listOf("one", "two", "three") // 불변형 List
val mutableNames = names.toMutableList() // 새로운 가변형 List 가 만들어짐
mutableNames.add("four")
println(mutableNames)
}
불변형 List의 요소를 그대로 가변형 List를 생성하려면 toMutableList()를 사용한다
기존의 List를 변경하는 개념이 아니라 그대로 두고 새로운 공간을 만들어내는 개념이다
'Android > Kotlin' 카테고리의 다른 글
[Kotlin] sequence (시퀀스) (0) | 2023.08.03 |
---|---|
[Kotlin] Set과 Map (0) | 2023.07.30 |
[Kotlin] Array 클래스 (0) | 2023.07.21 |
[Kotlin] 제네릭(Generic) (0) | 2023.06.18 |
[Kotlin] 클래스와 클래스의 관계 (0) | 2023.05.29 |