Better way to find index of item in ArrayList?
Solution 1:
ArrayList
has a indexOf()
method. Check the API for more, but here's how it works:
private ArrayList<String> _categories; // Initialize all this stuff
private int getCategoryPos(String category) {
return _categories.indexOf(category);
}
indexOf()
will return exactly what your method returns, fast.
Solution 2:
ArrayList<String> alphabetList = new ArrayList<String>();
alphabetList.add("A"); // 0 index
alphabetList.add("B"); // 1 index
alphabetList.add("C"); // 2 index
alphabetList.add("D"); // 3 index
alphabetList.add("E"); // 4 index
alphabetList.add("F"); // 5 index
alphabetList.add("G"); // 6 index
alphabetList.add("H"); // 7 index
alphabetList.add("I"); // 8 index
int position = -1;
position = alphabetList.indexOf("H");
if (position == -1) {
Log.e(TAG, "Object not found in List");
} else {
Log.i(TAG, "" + position);
}
Output: List Index : 7
If you pass H it will return 7, if you pass J it will return -1 as we defined default value to -1.
Done
Solution 3:
If your List
is sorted and has good random access (as ArrayList
does), you should look into Collections.binarySearch
. Otherwise, you should use List.indexOf
, as others have pointed out.
But your algorithm is sound, fwiw (other than the ==
others have pointed out).
Solution 4:
Java API specifies two methods you could use: indexOf(Object obj)
and lastIndexOf(Object obj)
. The first one returns the index of the element if found, -1 otherwise. The second one returns the last index, that would be like searching the list backwards.
Solution 5:
There is indeed a fancy shmancy native function in java you should leverage.
ArrayList has an instance method called
indexOf(Object o)
(http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html)
You would be able to call it on _categories
as follows:
_categories.indexOf("camels")
I have no experience with programming for Android - but this would work for a standard Java application.
Good luck.