Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cf66647a authored by Soroosh Mariooryad's avatar Soroosh Mariooryad
Browse files

Sorting search results with TreeSet instead of Collection.sort

Benchmarking shows lower sorting latencies with with TreeSet, specially
with larger lists:

Average Latencies(ms):
                  list size in [0, 115]         list size in [40, 115]
Collection.sort   39.22                         77.57
TreeSet           30.23                         52.06

Test: RunSettingsRoboTests

Bug: 38197948
Bug: 37312700

Change-Id: I1dd7c77900e8e98e26a8417f2b77582532e1a5f3
parent afeb5e2d
Loading
Loading
Loading
Loading
+18 −16
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;

public class SearchResultsAdapter extends RecyclerView.Adapter<SearchViewHolder>
        implements SearchResultsRankerCallback {
@@ -312,8 +313,8 @@ public class SearchResultsAdapter extends RecyclerView.Adapter<SearchViewHolder>
        int appSize = installedAppResults.size();

        final List<SearchResult> asyncRankingResults = new ArrayList<>(dbSize + appSize);
        List<SearchResult> databaseResultsSortedByScores = new ArrayList<>(databaseResults);
        Collections.sort(databaseResultsSortedByScores, new Comparator<SearchResult>() {
        TreeSet<SearchResult> dbResultsSortedByScores = new TreeSet<>(
                new Comparator<SearchResult>() {
                    @Override
                    public int compare(SearchResult o1, SearchResult o2) {
                        float score1 = getRankingScoreByStableId(o1.stableId);
@@ -327,7 +328,8 @@ public class SearchResultsAdapter extends RecyclerView.Adapter<SearchViewHolder>
                        }
                    }
                });
        asyncRankingResults.addAll(databaseResultsSortedByScores);
        dbResultsSortedByScores.addAll(databaseResults);
        asyncRankingResults.addAll(dbResultsSortedByScores);
        // App results are not ranked by async ranking and appended at the end of the list.
        asyncRankingResults.addAll(installedAppResults);
        return asyncRankingResults;