I am trying to learn the "Kotlin native way" to do things in Android, while being an expert in neither Kotlin, Java, nor Android development. Specifically, when to use ArrayList
versus MutableList
.
It seems to me that MutableList
should be chosen whenever possible. Yet, if I look at Android examples, they seem to always choose the ArrayList
(as far as I've found so far).
Below is a snippet of a working example that uses ArrayList
and extends Java's RecyclerView.Adapter
.
class PersonListAdapter(private val list: ArrayList<Person>,
private val context: Context) : RecyclerView.Adapter<PersonListAdapter.ViewHolder>() {
Question 1)
Could I simply write the above code as follows (note MutableList<>
instead of ArrayList<>
), even though I am borrowing from Android's Java code?
class PersonListAdapter(private val list: MutableList<Person>,
private val context: Context) : RecyclerView.Adapter<PersonListAdapter.ViewHolder>() {
Question 2)
Is it really better to always use MutableList
over ArrayList
? What are the main reasons? Some of that link I provide above goes over my head, but it seems to me that MutableList
is a looser implementation that is more capable of changing and improving in the future. Is that right?
The difference is:
if you use
ArrayList()
you are explicitly saying "I want this to be anArrayList
implementation ofMutableList
and never change to anything else".If you use
mutableListOf()
it is like saying "Give me the defaultMutableList
implementation".Current default implementation of the
MutableList
(mutableListOf()
) returns anArrayList
. If in the (unlikely) event of this ever changing in the future (if a new more efficient implementation gets designed) this could change to...mutableListOf(): MutableList<T> = SomeNewMoreEfficientList()
.In that case, wherever in your code you used
ArrayList()
this will stayArrayList
. Wherever you have usedmutableListOf()
this would change fromArrayList
to the brilliantly namedSomeNewMoreEfficientList
.