From c0ac1d37d5bf8b7517588ee193e5e94a9df151f8 Mon Sep 17 00:00:00 2001 From: Songchun Fan Date: Mon, 16 May 2022 19:25:59 +0000 Subject: [PATCH] [SparseSetArray] optimize copy constructor BUG: 232347307 Test: atest android.util.SparseSetArrayTest Change-Id: Ie046f557098ddc168b86523700cc06feede97e5e --- core/java/android/util/SparseSetArray.java | 5 +--- .../src/android/util/SparseSetArrayTest.java | 23 +++++++++++++++++++ 2 files changed, 24 insertions(+), 4 deletions(-) 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)); + } + } + } }