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

private val repositories = mutableListOf<String>()

private val repositories = ArrayList<String>()

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

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



답변

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

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

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

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

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

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


답변

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등에.


답변

출처 에서 볼 수 있듯이 :

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

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


답변