OSDN Git Service

indexOfValue now uses .equals (cont.)
authorTejas Khorana <khorana@google.com>
Mon, 18 Jul 2016 18:18:27 +0000 (11:18 -0700)
committerTejas Khorana <khorana@google.com>
Mon, 18 Jul 2016 19:03:14 +0000 (12:03 -0700)
Addresses same issue addressed in SparseArray in LongSparseArray in
the method: indexByValue. Made a new method indexByValueByValue that
compares objects using .equals instead of ==.

Change-Id: I55735fe7ca364d0a9caab2a6909c2eaede845619

api/current.txt
api/system-current.txt
api/test-current.txt
core/java/android/util/LongSparseArray.java

index ed94018..6dda5df 100644 (file)
@@ -40458,6 +40458,7 @@ package android.util {
     method public E get(long, E);
     method public int indexOfKey(long);
     method public int indexOfValue(E);
+    method public int indexOfValueByValue(E);
     method public long keyAt(int);
     method public void put(long, E);
     method public void remove(long);
index 8d4186f..a8f3246 100644 (file)
@@ -43583,6 +43583,7 @@ package android.util {
     method public E get(long, E);
     method public int indexOfKey(long);
     method public int indexOfValue(E);
+    method public int indexOfValueByValue(E);
     method public long keyAt(int);
     method public void put(long, E);
     method public void remove(long);
index 847b53f..6935738 100644 (file)
@@ -40539,6 +40539,7 @@ package android.util {
     method public E get(long, E);
     method public int indexOfKey(long);
     method public int indexOfValue(E);
+    method public int indexOfValueByValue(E);
     method public long keyAt(int);
     method public void put(long, E);
     method public void remove(long);
index 6b45ff4..58ad2fd 100644 (file)
@@ -299,10 +299,39 @@ public class LongSparseArray<E> implements Cloneable {
             gc();
         }
 
-        for (int i = 0; i < mSize; i++)
-            if (mValues[i] == value)
+        for (int i = 0; i < mSize; i++) {
+            if (mValues[i] == value) {
                 return i;
+            }
+        }
+        return -1;
+    }
+
+    /**
+     * Returns an index for which {@link #valueAt} would return the
+     * specified key, or a negative number if no keys map to the
+     * specified value.
+     * <p>Beware that this is a linear search, unlike lookups by key,
+     * and that multiple keys can map to the same value and this will
+     * find only one of them.
+     * <p>Note also that this method uses {@code equals} unlike {@code indexOfValue}.
+     */
+    public int indexOfValueByValue(E value) {
+        if (mGarbage) {
+            gc();
+        }
 
+        for (int i = 0; i < mSize; i++) {
+            if (value == null) {
+                if (mValues[i] == null) {
+                    return i;
+                }
+            } else {
+                if (value.equals(mValues[i])) {
+                    return i;
+                }
+            }
+        }
         return -1;
     }