更好的方法来findArrayList中的项目的索引?

对于Android应用程序,我有以下function

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; } 

这是写出获取元素位置函数的“最佳”方法吗? 或者是有一个花式的shmacy本地函数在Java我应该利用?

ArrayList有一个indexOf()方法 。 检查API了解更多,但这是如何工作的:

 private ArrayList<String> _categories; // Initialize all this stuff private int getCategoryPos(String category) { return _categories.indexOf(category); } 

indexOf()将快速返回您的方法返回的内容。

 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); } 

输出:列表索引: 7

如果传递H ,它将返回7 ,如果传递J ,它将返回-1,因为我们将默认值定义为-1。

完成

如果您的List已sorting并具有良好的随机访问(像ArrayList那样),您应该查看Collections.binarySearch 。 否则,你应该使用List.indexOf ,正如其他人指出的那样。

但是你的algorithm是正确的,fwiw(除了别人指出的)。

在java中确实有一个奇特的shmacy本地函数,你应该利用它。

ArrayList有一个实例方法调用

indexOf(Object o)

http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html);

您将能够在_categories上调用它,如下所示:

_categories.indexOf("camels")

我没有使用Android编程的经验,但是这对于标准的Java应用程序是有效的。

祝你好运。

Java API指定了两个可以使用的方法: indexOf(Object obj)lastIndexOf(Object obj) 。 第一个返回元素的索引,否则返回-1。 第二个返回最后一个索引,就像向后search列表一样。