Java 在ArrayList中查找项索引的更好方法?

Java 在ArrayList中查找项索引的更好方法?,java,for-loop,arraylist,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)

对于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;
}
private ArrayList\u categories;//例如[“马”、“骆驼”[等]]
私有int getCategoryPos(字符串类别){
对于(int i=0;i

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

ArrayList
有一个。更多信息,请查看API,但其工作原理如下:

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

private int getCategoryPos(String category) {
  return _categories.indexOf(category);
}
private ArrayList\u categories;//初始化所有这些东西
私有int getCategoryPos(字符串类别){
返回_categories.indexOf(category);
}

indexOf()
将快速准确地返回方法返回的内容。

java中确实有一个奇特的shmancy本机函数,您应该利用它

ArrayList有一个名为

indexOf(对象o)

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

您可以在
\u categories
上调用它,如下所示:

\u类别。索引(“骆驼”)

我没有为Android编程的经验,但这将适用于标准Java应用程序


祝你好运。

JavaAPI指定了两种可以使用的方法:
indexOf(objectobj)
lastIndexOf(objectobj)
。第一个返回元素的索引(如果找到),否则返回-1。第二个返回最后一个索引,这类似于向后搜索列表。

如果您的
列表
已排序并且具有良好的随机访问能力(如
ArrayList
所做的),您应该查看
集合。binarySearch
。否则,正如其他人所指出的,您应该使用
List.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);
}
但是你的算法是正确的,fwiw(除了别人指出的
=
之外)。

ArrayList alphabetList=new ArrayList();
字母列表。添加(“A”);//0索引
字母列表。添加(“B”);//1指数
字母列表。添加(“C”);//2指数
alphabetList.add(“D”);//3指数
字母列表。添加(“E”);//4索引
字母列表。添加(“F”);//5指数
字母列表。添加(“G”);//6指数
字母列表。添加(“H”);//7索引
字母列表。添加(“I”);//8指数
int位置=-1;
位置=alphabetList.indexOf(“H”);
如果(位置==-1){
Log.e(标记“列表中未找到对象”);
}否则{
日志i(标签“+”位置);
}
输出:列表索引:7

如果通过H它将返回7,如果通过J它将返回-1,正如我们定义的默认值为-1


完成

找到列表中项目位置的最佳方法是使用集合界面

例如

List sampleList=Arrays.asList(10,45,56,35,6,7);
集合。二进制搜索(样本列表,56);
输出:2使用indexOf()方法查找集合中第一个出现的元素。

这里的最佳解决方案

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)

本机函数对我来说意味着C\C++。这段代码可能有缺陷:在大多数情况下使用
=
会产生错误的结果。记住,你不能将字符串与“==”进行比较,你必须使用String.equals(String str)@MrZander确保你可以将它们与
=
进行比较。。。这不是正确的比较;-)你可以看出我对Java还是新手。。是
String.equals
更像是JavaScript语言中的
=
吗?例如,检查值和类型?编号。
==
是对象标识,表示“是同一对象”。(如果您认为只有一个值为42或char’x’等),则此视图适用于原始值和引用类型。code>Object.equals
是为所有对象实例定义的虚拟方法,它意味着“具有相同的值”,因为所有类类型都扩展了Object,并且应该用于所有对象相等性测试。封面上有很多问题,比如关于对象的问题,这是一个非常重要的概念!例如,这是错误的:
“hello”==新字符串(“hello”)
!啊!就复杂性而言,它并不比发布的代码“快”,尽管它的实现效率可能更高。此外,indexOf在这里的反应会略有不同:原始代码[错误地]使用
=
,而indexOf使用
equals()
。事实上,它几乎是完全相同的代码(至少在Sun Java 6代码中是如此),除了用另一个No.Car分支来处理NULL之外,它是有线的老数组和列表有FIDENTIX()方法,但是API在中间为ARARYLIST改变:DWO我可以使它反之亦然,对于你的解决方案,你的输入是H,你得到H的位置,假设我的输入是7的索引,那么我如何获得该索引的字符串值。感谢You@JimaleAbdi做你的数组列表。得到(7)。这是你的职位。
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)