How to compare two arrays in Kotlin? How to compare two arrays in Kotlin? arrays arrays

How to compare two arrays in Kotlin?


In Kotlin 1.1 you can use contentEquals and contentDeepEquals to compare two arrays for structural equality. e.g.:

a contentEquals b // trueb contentEquals c // false

In Kotlin 1.0 there are no "built-in functions to the Kotlin std-lib that tests two arrays for (value) equality for each element."

"Arrays are always compared using equals(), as all other objects" (Feedback Request: Limitations on Data Classes | Kotlin Blog).

So a.equals(b) will only return true if a and b reference the same array.

You can, however, create your own "optionals"-friendly methods using extension functions. e.g.:

fun Array<*>.equalsArray(other: Array<*>) = Arrays.equals(this, other)fun Array<*>.deepEqualsArray(other: Array<*>) = Arrays.deepEquals(this, other)

P.S. The comments on Feedback Request: Limitations on Data Classes | Kotlin Blog are worth a read as well, specifically comment 39364.


Kotlin 1.1 introduced extensions for comparing arrays by content:contentEquals and contentDeepEquals.

These extensions are infix, so you can use them the following way:

val areEqual = arr1 contentEquals arr2


And if you want to compare contents of two Collections ignoring the order you can add this simple extension:

infix fun <T> Collection<T>.sameContentWith(collection: Collection<T>?)    = collection?.let { this.size == it.size && this.containsAll(it) }

...and use it like this:

a = mutableListOf<String>()b = mutableListOf<String>()isListsHasSameContent = a sameContentWith b