AI 144008: UriMatcher: Avoid repeated calls to Uri.getPathSegments()

in UriMatcher.match().
  Before, every call to UriMatcher.match() called
  Uri.getPathSegments() N + 1 times,
  where N is the size of the list returned by
  Uri.getPathSegments(). Since some of the implementations
  of Uri.getPathSegments() are O(N), UriMatcher.match() was O(N^2).
  This CL fixes the problem by calling uri.getPathSegments() once in
  the beginning of match(). That should be safe since Uri is
  immutable.
  BUG=1751158

Automated import of CL 144008
This commit is contained in:
Bjorn Bringert
2009-04-01 10:27:37 -07:00
committed by The Android Open Source Project
parent 43f503fd1e
commit dc0ec18665

View File

@@ -200,7 +200,8 @@ public class UriMatcher
*/
public int match(Uri uri)
{
final int li = uri.getPathSegments().size();
final List<String> pathSegments = uri.getPathSegments();
final int li = pathSegments.size();
UriMatcher node = this;
@@ -209,7 +210,7 @@ public class UriMatcher
}
for (int i=-1; i<li; i++) {
String u = i < 0 ? uri.getAuthority() : uri.getPathSegments().get(i);
String u = i < 0 ? uri.getAuthority() : pathSegments.get(i);
ArrayList<UriMatcher> list = node.mChildren;
if (list == null) {
break;