Archives
Recent Posts
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Today
Total
관리 메뉴

안드로이드 개발자의 창고

[19일차 Kotlin] List 본문

Computer/Kotlin

[19일차 Kotlin] List

Wise-99 2023. 5. 24. 02:11

 

 

출처 : 안드로이드 앱스쿨 2기 윤재성 강사님 수업 PPT

 

 

 

📖 Collection

  • 자료구조에 나오는 다양한 데이터 관리 기법을 사용할 수 있도록 제공하고 있는 라이브러리
  • List : 순서를 통해 관리한다.
  • Map : 이름을 통해 관리한다.
  • Set : 집합 관리

 


 

📖 List

  • 배열과 동일하게 인덱스 번호를 통해 객체를 관리한다.
  • 배열을 크기가 정해지면 변경할 수 없지만 List는 추가, 삭제 등이 가능하다.

 

 

 

📖 예제 코드

리스트 생성

fun main(){
    val list1 = listOf(10, 20, 30, 40, 50)

    val list2 = listOf(100, 11.11, "문자열", true)

    val list3 = mutableListOf<Int>() // []
    val list4 = mutableListOf("문자열1", "문자열2", "문자열3")

    val list5 = emptyList<Int>() // []

    val list6 = listOf(10, 20, null, 40, null, 60, 70) // [10, 20, null, 40, null, 60, 70]
    val list7 = listOfNotNull(10, 20, null, 40, null, 60, 70) // [10, 20, 40, 60, 70]
}
  • listOf : 불변형 리스트 생성(생성 이후 삽입, 추가, 수정, 삭제 불가능)
  • mutableListOf : 가변형 리스트 생성
  • emptyList : 비어있는 불변형 리스트를 생성한다.
  • listOfNotNull : null을 제외한 나머지만으로 리스트를 생성한다.

객체 가져오기

fun main(){
    val list1 = listOf(10, 20, 30, 40, 50)

    println("list1 0 : ${list1[0]}") // 10
    println("list1 1 : ${list1[1]}") // 20
}
  • get : 0부터 시작하는 인덱스 번호를 통해 객체를 추출할 수 있다.
  • Kotlin의 리스는 배열과 동일하게 [ ]를 사용할 수 있다.

기타 메서드

fun main(){
    val list9 = listOf(10, 20, 30, 10, 20, 30)
    
    println("list9 size : ${list9.size}") // 6

    val index1 = list9.indexOf(20)
    println("index1 : $index1") // 1

    val index2 = list9.lastIndexOf(20)
    println("index2 : $index2") // 4

    val list10 = list9.subList(1, 3)
    println("list10 : $list10") // [20, 30]
}
  • size : 리스트의 크기(요소의 갯수)를 반환한다.
  • indexOf : 지정된 값의 인덱스 번호를 반환한다. 값이 없을 경우 -1을 반환한다.
  • lastIndexOf : 지정된 값이 마지막에 해당하는 값의 인덱스 번호를 반환한다. 값이 없을 경우 -1을 반환한다.
  • subList : 지정된 범위의 값을 추출하여 새로운 리스트를 생성해 반환한다.

가변형 리스트의 메서드(삽입, 추가, 수정, 삭제)

fun main(){
    val list21 = mutableListOf(10, 20, 30)

    // 추가
    list21.add(40)
    list21.add(50)
    list21.addAll(listOf(60, 70, 80, 90, 100))
    // [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]

    // 삽입
    list21.add(1, 1000)
    // [10, 1000, 20, 30, 40, 50, 60, 70, 80, 90, 100]

    list21.addAll(3, listOf(2000,3000,4000,5000))
    // [10, 1000, 20, 2000, 3000, 4000, 5000, 30, 40, 50, 60, 70, 80, 90, 100] 

    // 제거
    list21.remove(1000)
    // [10, 20, 2000, 3000, 4000, 5000, 30, 40, 50, 60, 70, 80, 90, 100]
    
    // 제거하고자 하는 값이 같은 것이 여러 개 있다면 제일 앞쪽에 있는 값 하나만 제거된다.
    list21.add(1000)
    list21.add(1000)
    list21.add(1000)
    // [10, 20, 2000, 3000, 4000, 5000, 30, 40, 50, 60, 70, 80, 90, 100, 1000, 1000, 1000]

    list21.remove(1000)
    // [10, 20, 2000, 3000, 4000, 5000, 30, 40, 50, 60, 70, 80, 90, 100, 1000, 1000]

    // 없는 값을 제거하면 아무 작업도 하지 않는다.
    list21.remove(10000)
    // [10, 20, 2000, 3000, 4000, 5000, 30, 40, 50, 60, 70, 80, 90, 100, 1000, 1000]

    list21.removeAll(listOf(2000, 3000, 4000, 5000))
    // [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 1000, 1000]

    list21.removeAll(listOf(1000))
    // [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]

    list21.removeAt(1)
    // [10, 30, 40, 50, 60, 70, 80, 90, 100]

    // 수정
    list21.set(1, 200)
    // [10, 200, 40, 50, 60, 70, 80, 90, 100]

    list21[2] = 100
    // [10, 200, 100, 50, 60, 70, 80, 90, 100]
}
  • add(객체) : 객체를 추가한다.
  • add(인덱스, 객체) : 주어진 인덱스 위치에 객체를 삽입한다.
  • remove(객체) : 주어진 객체를 제거한다.
  • removeAll() : 다수의 값을 제거한다.
  • removeAt(인덱스) : 주어진 인덱스의 객체를 제거한다.
  • set(인덱스, 객체) : 주어진 인덱스에 객체를 덮어씌운다.

리스트 상호 변경

fun main(){
    val list100 = listOf(10, 20, 30, 40, 50)

    val list200 = list100.toMutableList()
    list200.add(60)

    println("list100 : $list100")
    println("list200 : $list200")

    val list300 = list200.toList()
    list300.add(70)    <<< 오류 발생
}
  • toMutableList() : 저장되어 있는 객체()을 추출하여 mutableList로 생성하여 반환한다.
  • toList() : 저장되어 있는 객체()을 추출하여 list로 생성하여 반환한다.
  • list300.add(70) : mutableList를 list(불변형)로 변경했기 때문에 삽입이 불가능하다.

'Computer > Kotlin' 카테고리의 다른 글

[19일차 Kotlin] Map  (0) 2023.05.24
[19일차 Kotlin] Set  (0) 2023.05.24
[19일차 Kotlin] 문자열(String, StringBuffer)  (0) 2023.05.24
[19일차 Kotlin] 배열(Arrray)  (0) 2023.05.23
[18일차 Kotlin] 리플렉션(Reflection)  (0) 2023.05.23