I beleive the description of sparse array clearly mentions the difference:
It is intended to be more memory efficient than using a HashMap to map Integers to Objects, both because it avoids auto-boxing keys and its data structure doesn't rely on an extra entry object for each mapping.
For further reading: http://developer.android.com/reference/android/util/SparseArray.html