[Kotlin-Collection] mutableList/Set/Map/immutable Collection

24847 단어 kotlinkotlin

mutable Collection interface

kotlin.collections
MutableListinterface MutableList< E > : List< E >, MutableCollection< E >
MutableSetinterface MutableSet< E > : Set< E >, MutableCollection< E >
MutableMapinterface MutableMap<K, V> : Map<K, V>

mutable Collection function

kotlin.collections
mutableListoffun < T > mutableListOf( / vararg elements: T): MutableList< T >=ArrayList()
mutableSetoffun < T > mutableSetOf( / vararg elements: T): MutableSet< T >
mutableMapoffun <K, V> mutableMapOf( /vararg pairs: Pair<K, V>): MutableMap<K, V>
kotlin.collections
MutableListinterface MutableList< E > : List< E >, MutableCollection< E >
ArrayListclass ArrayList< E > : MutableList< E >, RandomAccess
mutableListoffun < T > mutableListOf( / vararg elements: T): MutableList< T >=ArrayList()
arrayListOffun < T > arrayListOf(): ArrayList< T > = ArrayList()=ArrayList()

MutableList와 ArrayList의 차이

  • MutableList = 추가, 삭제 등 수정이 가능한 리스트
  • ArrayList = 내부에 Array로 구현되어 있는 추가, 삭제 등 수정이 가능한 리스트
  • 즉, ArrayList는 MutableList 중에서도 ArrayList를 사용하겠다 라고 명시한 것이고 MutableList는 Mutable한 List를 사용하겠다 라는 의미이다
  • 그러나 현재 Kotlin에서는 mutableList나 arrayListOf나 둘 다 ArrayList를 반환한다.

1.mutableListOf

  • fun < T > mutableListOf( ): MutableList< T >
 var list2 = mutableListOf<String>() //빈 리스트 생성시에는 지네릭 생략 불가

  • fun < T > mutableListOf(vararg elements: T): MutableList< T >
    val list = mutableListOf("1", 2, 3 , 4)
    
    println(list.add(5)) //배열 마지막에 5 추가: true리턴
    list.add(0, 100) //0번째 인덱스에 100추가
    list.set(1, 200) //1번 인덱스 값 200으로 바꿈
    println(list.contains(200)) //200 포함? :true 리턴
    println(list.isEmpty()) //빈 배열임?: false
    println(list.size)  //*자바랑 다르다!!!!!!    
    println(list.get(0)) //0번째 인덱스 값 줌: 100
    println(list.indexOf(100)) //100의 인덱스 번호 리턴: 0
    //list.clear()  값 싹다 지우는거 가능
    list.remove(100) //해당 객체 지우기
    list.remove(387647)  //없는 값을 삭제하려해도 오류 발생 안함
    list.removeAt(0)   //*해당 인덱스 객체 삭제  자바 컬렉션은 remove인자로 인덱스,객체 둘다 받았는데 다르네!
    println(list) //자바랑 마찬가지로 배열은 참조 번지 출력되는데 얘는 배열 값들 출력되는군
    for (item in list) { //향상된 for문
        println(item)
    }

add(value) : 기존 컬렉션 뒤에 값을 하나 더 추가한다
addAll(collection) : 기존 컬렉션 뒤에 컬렉션 값을 더 추가한다
remove(value) : 해당 값을 찾아 하나 삭제한다. 이 때, 컬렉션의 가장 앞의 값을 먼저 제거한다.
removeAll(collection) : 해당 컬렉션에 포함된 값을 '전부' 삭제한다.
retainAll(collection) : 해당 컬렉션에 포함된 값을 제외하고 전부 삭제한다.
clear() : 컬렉션 내부 값을 모두 삭제한다.

fun main() {
    val list : MutableCollection<Int> = mutableListOf(1,2,4,2,3,2,5)
    println("list : $list")

    list.add(1)
    println("add : $list")

    list.addAll(listOf(2,3,4))
    println("addAll : $list")

    list.remove(1)
    println("remove : $list")

    list.removeAll(listOf(2,3))
    println("removeAll : $list")

    list.retainAll(listOf(4,5))
    println("retainAll : $list")

    list.clear()
    println("clear : $list")
}

list : [1, 2, 4, 2, 3, 2, 5]
add : [1, 2, 4, 2, 3, 2, 5, 1]
addAll : [1, 2, 4, 2, 3, 2, 5, 1, 2, 3, 4]
remove : [2, 4, 2, 3, 2, 5, 1, 2, 3, 4]
removeAll : [4, 5, 1, 4]
retainAll : [4, 5, 4]
clear : []

2.mutableSetOf

  • fun < T > mutableSetOf( ): MutableSet< T >
   var list2 = mutableListOf<String>() //빈 리스트 생성시에는 지네릭 생략 불가

  • fun < T > mutableSetOf(vararg elements: T): MutableSet< T >
    var set = mutableSetOf(1, 2, 3, 4, 4)
    
    println(set) //4출력 안되고
    println(set.add(500)) //500추가:true리턴
    set.contains(500) //500값으로 잇음?:true리턴
    set.isEmpty() //set컬렉션 비어있음?:false
    set.size  //값 수
    //set.clear()
    println(set.remove(500))//500 삭제:true리턴
    set.remove(56872634) //없는 값 삭제하려해도 오류 발생 안함
    for (item in set) {
        println(item)
    } //향상된 for문으로 꺼내오기

3.mutableMapOf

  • fun <K, V> mutableMapOf(): MutableMap<K, V>
    var map = mutableMapOf<String, String>()
    
    map.put("1", "김숙")
    map.put("2", "전지현")
    map.put("1", "김씨네")  //값 수정!! set메서드랑 비슷하군
    println(map.containsKey("1")) //이 키 있니:true
    println(map.containsValue("김숙")) //이 값 있니:true
    println(map.get("1")) //이 키인 값 내놔
    //map.clear() //전부 다 지움
    map.remove("1") //이 키인 값 삭제, 키도 같이 없어지네
    map.remove("3535") //없는 키 삭제하려 해도 오류 발생 안함
    map.replace("2", "배고파") //*해당 키 값을 해당 값으로 바꿈, import필요
    println(map.keys)  //*키 다 내놔
    println(map.values) //*값 다 내놔

  • fun <K, V> mutableMapOf(vararg pairs: Pair<K, V>): MutableMap<K, V>
    val map2 = mutableMapOf(1 to 2, 2 to 3, 3 to 4)
    
    println(map2)
    for (item in map) {  //향상된 for문으로 출력
    println(item)

immutable Collection interface

kotlin.collections
Listinterface List< out E > : Collection< E >
Setinterface Set< out E > : Collection< E >
Mapinterface Map<K, out V>

immutable Collection function

kotlin.collections
listOffun < T > listOf( /vararg elements: T): List< T >
setOffun < T > setOf( /vararg elements: T): Set< T >
mapOffun <K, V> mapOf( /vararg pairs: Pair<K, V>): Map<K, V>
  • 읽기 전용 이뮤터블 컬렉션:값을 변경할수 없음,교체/삭제/추가 불가
  • 자바의 읽기전용 list랑 비슷한듯: List aslist=new ArrayList(list2.subList(0,3));
  • 입력된 값을 get()으로 사용만 가능
  • val로 선언하고 변수명은 대문자로 선언
   val DAY_LIST = listOf("월", "화", "수")
   val DAY_LIST2 = listOf<Int>(1, 2, 3, 4)
   DAY_LIST.get(0)

   val setmu = setOf<Int>(1, 2, 3, 3, 3)
   val mapmu = mapOf<Int, Int>()

참고https://zladnrms.tistory.com/140

좋은 웹페이지 즐겨찾기