在ArrayList中查找项目索引的更好方法是什么?

时间:2011-12-08 23:09:28

标签: java for-loop arraylist

对于Android应用,我有以下功能

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

这是编写获取元素位置的函数的“最佳”方式吗?或者我应该利用java中的一个奇特的shmancy本机函数?

9 个答案:

答案 0 :(得分:175)

ArrayList有一个indexOf() method。检查API以获取更多信息,但以下是它的工作原理:

private ArrayList<String> _categories; // Initialize all this stuff

private int getCategoryPos(String category) {
  return _categories.indexOf(category);
}

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

答案 1 :(得分:14)

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。

完成

答案 2 :(得分:6)

如果您的List已排序且具有良好的随机访问权限(如ArrayList所示),则应查看Collections.binarySearch。否则,您应该使用List.indexOf,正如其他人指出的那样。

但你的算法是合理的,fwiw(除了==其他人指出的)。

答案 3 :(得分:3)

你应该利用java确实存在一个奇特的shmancy本机函数。

ArrayList有一个名为

的实例方法

indexOf(Object o)

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

您可以在_categories上按以下方式拨打电话:

_categories.indexOf("camels")

我没有使用Android编程的经验 - 但这适用于标准的Java应用程序。

祝你好运。

答案 4 :(得分:2)

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

答案 5 :(得分:1)

找到项目在列表中的位置的最佳方法是使用“收藏夹”界面,

例如

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

输出:2

答案 6 :(得分:1)

使用indexOf()方法查找元素在集合中的首次出现。

答案 7 :(得分:0)

最佳解决方案

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)

答案 8 :(得分:-1)

item_name是项目名称; cat_name是数组列表;

String category_selected = null;
if (cat_name.contains(item_name)) {  // check from array list
    category_selected = item_name;    
    int id = cat_name.indexOf(item_name);  // get item id
    Log.e("selectionid", id + "");
    category_spinner.setSelection(id);   // set item id in spinner
    Log.e("categoryselect", category_selected + "");
}