[Kotlin] List

Subeen·2023년 11월 21일
0

Kotlin 문법

목록 보기
2/23

Map과 List를 정리 하며 컬렉션의 immutable과 mutable을 더 이해할 수 있게 되었다. 리스트를 검색하면서 리스트와 같이 사용할 수 있는 함수들이 생각보다 더 많다는 것을 알게 되었고 기본적인 사용법을 정리한 후 해당 함수들에 대해서도 정리하는 시간을 가져야겠다. 🤔

Kotlin Collections

  • 코틀린의 컬렉션은 자바 컬렉션의 구조를 확장하여 구현했다.
  • 컬렉션은 크게 읽기 전용인 불변형(immutable)과 가변형(mutable)으로 나뉜다.
  • 자바에서는 가변형 컬렉션만 취급되므로 자바와 상호작용하는 코드에서는 주의해야 한다.
  • 변수를 선언할 때 불변형 val의 사용을 권장하듯이 컬렉션도 되도록 읽기 전용인 불변형으로 선언할 것을 권장한다.

컬렉션 종류

  • List
    • 불변형(읽기 전용) : listOf
    • 가변형 : mutableListOf, arrayListOf
  • Set
    • 불변형(읽기 전용) : setOf
    • 가변형 : mutableSetOf, hashSetOf, linkedSetOf, sortedSetOf
  • Map
    • 불변형(읽기 전용) : mapOf
    • 가변형 : mutableMapOf, hashMapOf, linkedMapOf, sortedMapOf

Kotlin에서 List란?

  • 리스트는 순서를 가지는 컬렉션으로 값의 중복을 허용한다.

List 생성

  • List는 기본적으로 immutable(불변형)이며 listOf() 함수를 사용하거나 List(5, {i -> i}) 와 같이 생성자에 리스트의 길이와 초기화를 위한 람다식을 넣어 immutable List를 생성한다.
// (1)
val list1 = listOf(0, 1, 2, 3, 4)
println("$list1")  // [0, 1, 2, 3, 4]

// (2)
val list2 = List(5, {i -> i}) 
println("$list2")  // [0, 1, 2, 3, 4]
  • 값의 수정이 가능한 mutable List는 mutableListOf() 함수를 사용하여 생성하며 값을 대입하지 않을 경우 타입을 필수로 명시한다.
val list1 = mutableListOf(0, 1, 2, 3, 4)
println("$list1")  // [0, 1, 2, 3, 4]
        
val list2 = MutableList<Int>(5, {i -> i})
println("$list2")  // [0, 1, 2, 3, 4]

List 요소 추가

  • add(value) : 요소를 추가한다.
  • addAll(collection) : collection에 있는 요소를 모두 추가한다.
val numberList = mutableListOf<String>("one", "two", "three")
println("$numberList")  // [one, two, three]
        
// add()
numberList.add("four")  
println("$numberList")  // [one, two, three, four]
        
// addAll()
val newList = listOf("nine", "ten")
numberList.addAll(newList)
println("$numberList")  // [one, two, three, four, nine, ten]

List 요소 수정

  • List의 요소를 수정하기 위해서는 [] 사이에 요소의 인덱스를 넣어 데이터에 접근하여 수정한다.
  • set(index, value) 함수를 사용하여 index에 해당하는 요소를 value로 수정한다.
val list1 = mutableListOf<Int>(5, 4, 3, 2, 1)
println("$list1")  // [5, 4, 3, 2, 1]
        
list1[1] = 0  // 4 -> 0
println("$list1")  // [5, 0, 3, 2, 1]
        
list1.set(2, 0) // 3 -> 0
println("$list1")  // [5, 0, 0, 2, 1]

List 요소 제거

  • remove(value) : 해당 요소를 제거한다.
  • removeAt(index) : 해당 인덱스에 해당하는 요소를 제거한다.
val list1 = mutableListOf<Int>(0, 1, 2, 3, 4)

// remove()
list1.remove(4)  // [0, 1, 2, 3]
println("$list1")
        
// removeAt()
list1.removeAt(0)
println("$list1")  // [1, 2, 3]
  • removeAll() : collection에 있는 요소를 모두 제거한다.
  • retainAll() : 조건에 해당하는 것을 제외하고 제거한다.
  • clear() : 요소를 모두 제거한다.
val list1 = MutableList<Int>(10, {i -> i})
println("$list1")  // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

// removeAll(collection)
list1.removeAll(listOf(0, 1, 2, 11))
println("$list1")  // [3, 4, 5, 6, 7, 8, 9]
        
// retainAll()
list1.retainAll { it < 5 }
println("$list1")  // [3, 4]
        
// clear()
list1.clear()
println("$list1")  // []

List 변환

  • toList() : 가변형 리스트를 불변형 리스트로 생성하여 반환한다.
  • toMutableList() : 불변형 리스트를 가변형 리스트로 생성하여 반환한다.
val list1 = listOf(0, 1, 2, 3, 4)
val newList1 = list1.toMutableList()
newList1.add(5)
println("$newList1")  // [0, 1, 2, 3, 4, 5]

val list2 = mutableListOf(0, 1, 2, 3, 4)
val newList2 = list2.toList()
newList2.add(5)  // error: unresolved reference: add

List Method

  • indexOf : 처음부터 요소를 탐색하여 해당 요소를 가지는 인덱스를 반환하는 함수
  • lastIndexOf : 마지막 요소부터 탐색하여 해당 요소를 가지는 인덱스를 반환하는 함수
  • subList : 지정된 범위의 리스트를 생성하여 반환하는 함수
  • distinct : 중복 된 요소를 제거하는 함수
val list1 = mutableListOf(0, 1, 1, 2, 2, 3, 4)
println("$list1")  // [0, 1, 1, 2, 2, 3, 4]

val idx = list1.indexOf(2)
println("$idx")  // 3
        
val lastIdx = list1.lastIndexOf(1)
println("$lastIdx")  // 2
        
val subList = list1.subList(0, 3)
println("$subList")  // [0, 1, 1]
        
val distinct = list1.distinct()
println("$distinct")  // [0, 1, 2, 3, 4]

참조
리스트 사용법

profile
개발 공부 기록 🌱

0개의 댓글