Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Kotlin – Adding value to an empty array

I am learning kotlin concepts and had the following question when I was going through the topic Arrays.

I created an empty

val empty = arrayOf<Int>()
empty[0] = 2

So the above code will fail and cause ArrayIndexOutOfBoundsException which makes sense because the size of an array cannot be changed and since the array was initialized with no size it is treated as an empty array.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

Here is where i thought this gets interesting

var emptyArray = arrayOf<Int>()
emptyArray += 1
emptyArray += 2

The above code doesn’t fail and when i print the items I am getting the results back. I am assuming there is something going on when trying to add an element to an index versus adding it directly but I couldn’t find any documentation that explains what is going on under the hood. Can someone please explain

>Solution :

In the second example, the + operator calls a function called plus, and then assigns the result back to the variable.

A look at the definition gives the following function:

/**
 * Returns an array containing all elements of the original array and then the given [element].
 */
public actual operator fun <T> Array<T>.plus(element: T): Array<T> {
    val index = size
    val result = java.util.Arrays.copyOf(this, index + 1)
    result[index] = element
    return result
}

As you see, a copy of the original is made but one larger. The new element is then assigned to the new, empty slot.


In the example a total of three arrays are allocated. First an empty, then a 1-size and finally a 2-size array, which is the final result. Each array still cannot change its size.

Note that you have to use var, and val will lead to a ‘val cannot be reassigned’ error.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading