diff --git a/core/java/android/util/SparseSetArray.java b/core/java/android/util/SparseSetArray.java index 6646f01c57657..b7873b73cb28a 100644 --- a/core/java/android/util/SparseSetArray.java +++ b/core/java/android/util/SparseSetArray.java @@ -38,10 +38,7 @@ public class SparseSetArray { for (int i = 0; i < arraySize; i++) { final int key = src.keyAt(i); final ArraySet set = src.get(key); - final int setSize = set.size(); - for (int j = 0; j < setSize; j++) { - add(key, set.valueAt(j)); - } + addAll(key, set); } } diff --git a/core/tests/coretests/src/android/util/SparseSetArrayTest.java b/core/tests/coretests/src/android/util/SparseSetArrayTest.java index e781547b0978d..3c17486aeb944 100644 --- a/core/tests/coretests/src/android/util/SparseSetArrayTest.java +++ b/core/tests/coretests/src/android/util/SparseSetArrayTest.java @@ -49,4 +49,27 @@ public class SparseSetArrayTest { assertThat(sparseSetArray.size()).isEqualTo(5); } + + @Test + public void testCopyConstructor() { + final SparseSetArray sparseSetArray = new SparseSetArray<>(); + + for (int i = 0; i < 10; ++i) { + for (int j = 100; j < 110; ++j) { + sparseSetArray.add(i, j); + } + } + final SparseSetArray sparseSetArrayCopy = new SparseSetArray<>(sparseSetArray); + assertThat(sparseSetArray.size()).isEqualTo(sparseSetArrayCopy.size()); + for (int i = 0; i < sparseSetArray.size(); ++i) { + final ArraySet array = sparseSetArray.get(i); + final ArraySet arrayCopy = sparseSetArrayCopy.get(i); + assertThat(array).isNotNull(); + assertThat(arrayCopy).isNotNull(); + assertThat(array.size()).isEqualTo(arrayCopy.size()); + for (int j = 0; j < array.size(); j++) { + assertThat(array.valueAt(j)).isEqualTo(arrayCopy.valueAt(j)); + } + } + } }