Better way to find index of item in ArrayList?

JavaFor LoopArraylist

Java Problem Overview


For an Android app, I have the following functionality

private ArrayList<String> _categories; // eg ["horses","camels"[,etc]]

private int getCategoryPos(String category) {
	for(int i = 0; i < this._categories.size(); ++i) {
		if(this._categories.get(i) == category) return i;
	}
	
	return -1;
}

Is that the "best" way to write a function for getting an element's position? Or is there a fancy shmancy native function in java the I should leverage?

Java Solutions


Solution 1 - Java

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 - Java

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 - Java

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

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 - Java

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.

Solution 6 - Java

the best solution here

class Category(var Id: Int,var Name: String)
arrayList is Category list
val selectedPositon=arrayList.map { x->x.Id }.indexOf(Category_Id)
spinner_update_categories.setSelection(selectedPositon)

Solution 7 - Java

Use indexOf() method to find first occurrence of the element in the collection.

Solution 8 - Java

The best way to find the position of item in the list is by using Collections interface,

Eg,

List<Integer> sampleList = Arrays.asList(10,45,56,35,6,7);
Collections.binarySearch(sampleList, 56);

Output : 2

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJacksonkrView Question on Stackoverflow
Solution 1 - JavaJon EgelandView Answer on Stackoverflow
Solution 2 - JavaHiren PatelView Answer on Stackoverflow
Solution 3 - JavayshavitView Answer on Stackoverflow
Solution 4 - JavadancaView Answer on Stackoverflow
Solution 5 - JavarustybeanstalkView Answer on Stackoverflow
Solution 6 - JavaFatih ÇakıroğluView Answer on Stackoverflow
Solution 7 - JavaVasu Dev GargView Answer on Stackoverflow
Solution 8 - JavaPradeesh MPView Answer on Stackoverflow