diff --git a/firebase-firestore/CHANGELOG.md b/firebase-firestore/CHANGELOG.md index eb09c5e490f..c1790ff1f33 100644 --- a/firebase-firestore/CHANGELOG.md +++ b/firebase-firestore/CHANGELOG.md @@ -12,6 +12,8 @@ [#7370](//github.com/firebase/firebase-android-sdk/issues/7370) - [changed] Improve query performance by avoiding excessive Comparator instance creation. [#7388](//github.com/firebase/firebase-android-sdk/pull/7388) +- [changed] Improve query performance by using an unsorted HashMap instead of a sorted TreeMap. + [#7389](//github.com/firebase/firebase-android-sdk/pull/7389) # 26.0.0 diff --git a/firebase-firestore/src/main/java/com/google/firebase/firestore/core/DocumentViewChangeSet.java b/firebase-firestore/src/main/java/com/google/firebase/firestore/core/DocumentViewChangeSet.java index f89ca5f3771..7fb24ea7f29 100644 --- a/firebase-firestore/src/main/java/com/google/firebase/firestore/core/DocumentViewChangeSet.java +++ b/firebase-firestore/src/main/java/com/google/firebase/firestore/core/DocumentViewChangeSet.java @@ -19,16 +19,15 @@ import com.google.firebase.firestore.core.DocumentViewChange.Type; import com.google.firebase.firestore.model.DocumentKey; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; -import java.util.TreeMap; /** A set of changes to documents with respect to a view. This set is mutable. */ public class DocumentViewChangeSet { - // This map is sorted to make the unit tests simpler. - private final TreeMap changes; + private final HashMap changes; public DocumentViewChangeSet() { - changes = new TreeMap<>(); + changes = new HashMap<>(); } public void addChange(DocumentViewChange change) { diff --git a/firebase-firestore/src/test/java/com/google/firebase/firestore/core/DocumentViewChangeSetTest.java b/firebase-firestore/src/test/java/com/google/firebase/firestore/core/DocumentViewChangeSetTest.java index c876cf2a298..aa7b1f33351 100644 --- a/firebase-firestore/src/test/java/com/google/firebase/firestore/core/DocumentViewChangeSetTest.java +++ b/firebase-firestore/src/test/java/com/google/firebase/firestore/core/DocumentViewChangeSetTest.java @@ -14,6 +14,7 @@ package com.google.firebase.firestore.core; +import static com.google.common.truth.Truth.assertThat; import static com.google.firebase.firestore.testutil.TestUtil.EMPTY_MAP; import static com.google.firebase.firestore.testutil.TestUtil.doc; import static org.junit.Assert.assertEquals; @@ -71,20 +72,14 @@ public void testTrack() { List changes = set.getChanges(); - assertEquals(7, changes.size()); - assertEquals(added, changes.get(0).getDocument()); - assertEquals(Type.ADDED, changes.get(0).getType()); - assertEquals(removed, changes.get(1).getDocument()); - assertEquals(Type.REMOVED, changes.get(1).getType()); - assertEquals(modified, changes.get(2).getDocument()); - assertEquals(Type.MODIFIED, changes.get(2).getType()); - assertEquals(addedThenModified, changes.get(3).getDocument()); - assertEquals(Type.ADDED, changes.get(3).getType()); - assertEquals(removedThenAdded, changes.get(4).getDocument()); - assertEquals(Type.MODIFIED, changes.get(4).getType()); - assertEquals(modifiedThenRemoved, changes.get(5).getDocument()); - assertEquals(Type.REMOVED, changes.get(5).getType()); - assertEquals(modifiedThenModified, changes.get(6).getDocument()); - assertEquals(Type.MODIFIED, changes.get(6).getType()); + assertThat(changes) + .containsExactly( + DocumentViewChange.create(Type.ADDED, added), + DocumentViewChange.create(Type.REMOVED, removed), + DocumentViewChange.create(Type.MODIFIED, modified), + DocumentViewChange.create(Type.ADDED, addedThenModified), + DocumentViewChange.create(Type.MODIFIED, removedThenAdded), + DocumentViewChange.create(Type.REMOVED, modifiedThenRemoved), + DocumentViewChange.create(Type.MODIFIED, modifiedThenModified)); } }