Kotlin에서 ArrayList <String> ()과 mutableListOf <String> ()의 차이점


101
private val repositories = mutableListOf<String>()

private val repositories = ArrayList<String>()

모두 두 개의 키워드의 점은 무엇이며, 변경 가능한 목록입니다 mutableListOf또는 ArrayList?

아니면 큰 차이가 있습니까?


6
어느 쪽도하지 mutableListOf않고 ArrayList코 틀린의 키워드입니다
일리아

답변:


141

둘의 유일한 차이점은 의도를 전달하는 것입니다.

를 작성할 때 val a = mutableListOf()"나는 변경 가능한 목록을 원하고 구현에 특별히 신경 쓰지 않는다"라고 말하는 것입니다. 대신라고 쓰면 val a = ArrayList()"나는 특별히 원한다"라고 말하는 것 ArrayList입니다.

실제로 JVM으로 컴파일하는 Kotlin의 현재 구현에서 호출은를 mutableListOf생성하며 ArrayList동작에는 차이가 없습니다. 목록이 작성되면 모든 것이 동일하게 동작합니다.

이제 향후 버전의 Kotlin이 변경 mutableListOf되어 다른 유형의 목록을 반환 한다고 가정 해 보겠습니다 .

Kotlin 팀은 새 구현이 대부분의 사용 사례에서 더 잘 작동한다고 판단하는 경우에만 변경을 수행 할 것입니다. mutableListOf그러면 새로운 목록 구현을 투명하게 사용하고 더 나은 동작을 무료로 얻을 수 있습니다. mutableListOf당신의 경우처럼 들리면 함께 가십시오 .

반면에, 어쩌면 당신은 당신의 문제에 대해 시간 사고의 무리를 지출하고 있다고 생각 ArrayList 정말 당신의 문제에 가장 적합한, 당신은 뭔가 차선으로 이동하기 위험하지 않습니다. 그런 다음 ArrayList직접 사용하거나 arrayListOf공장 기능 (에 대한 ArrayList특정 아날로그)을 사용하고 싶을 것입니다 mutableListOf.


21

mutableListOf<T>()을 반환하는 인라인 함수 호출입니다 MutableList<T>. 오늘 mutableListOf부터는의 인스턴스를 반환합니다 ArrayList.

ArrayList<String>() 생성자 호출이며 인라인 될 수 없습니다.

즉, 주어진 :

 val a = mutableListOf<String>()
 val b = ArrayList<String>()
  • a 유형입니다 MutableList<String>
  • b 유형입니다 ArrayList<String>

런타임시, 모두 ab의 인스턴스를 개최한다 ArrayList.

함께 결합 될 때 주 인라인 특히 유용하다 형 물화 의 존재를 정당화, listOf, mutableListOf등에.


2
따라서 차이가 없습니다.
Sai

2
a그리고 b다른 선언 유형이 - 그래서 컴파일 타임에 차이가 있습니다.
miensol

다음과 같이 인라인 될 수 있습니다.val b = arrayListOf<String>()
Vlad

8

출처 에서 볼 수 있듯이 :

public inline fun <T> mutableListOf(): MutableList<T> = ArrayList()

그래서 차이는없고 단지 편의 방법 일뿐입니다.


1
그리고 "편리함"을 따옴표로 묶었습니다. MutableList가 실제로 다른 구현을 가질 때까지 다른 핵심 객체와 동일한 작업을 수행하는 핵심 객체를 제공하는 것은 혼란스럽고 전혀 편리하지 않습니다. :(
Mike Williamson
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.