Java 获取arraylist中项目的索引;

Java 获取arraylist中项目的索引;,java,arraylist,find,element,indexof,Java,Arraylist,Find,Element,Indexof,我有一个叫做AuctionItem的类。AuctionItem类有一个名为getName()的方法,该方法返回一个字符串。如果我有一个ArrayList类型的AuctionItem,那么返回ArrayList中具有特定名称的项目索引的最佳方法是什么 我知道有一个.indexOf()函数。此函数的参数是一个对象。要查找具有名称的项,我是否应该使用for循环,当找到该项时,返回ArrayList中的元素位置 有更好的办法吗 要查找具有名称的项,是否应该使用for循环,当找到该项时,返回ArrayLi

我有一个叫做
AuctionItem
的类。
AuctionItem
类有一个名为
getName()
的方法,该方法返回一个
字符串。如果我有一个
ArrayList
类型的
AuctionItem
,那么返回
ArrayList
中具有特定名称的项目索引的最佳方法是什么

我知道有一个
.indexOf()
函数。此函数的参数是一个对象。要查找具有名称的项,我是否应该使用for循环,当找到该项时,返回
ArrayList
中的元素位置

有更好的办法吗

要查找具有名称的项,是否应该使用for循环,当找到该项时,返回ArrayList中的元素位置


循环的“是”(使用索引或
迭代器)。在返回值上,根据需要返回其索引或项本身
ArrayList
没有
indexOf
(对象目标,比较)`或类似的索引。现在Java已经得到了lambda表达式(在Java8中,~2014年3月),我希望我们会看到API得到了接受lambda的方法。是的,您必须循环它

public int getIndex(String itemName)
{
    for (int i = 0; i < arraylist.size(); i++)
    {
        AuctionItem auction = arraylist.get(i);
        if (itemName.equals(auction.getname()))
        {
            return i;
        }
    } 

    return -1;
}
public int getIndex(String itemName)
{
对于(int i=0;i
基本上,您需要根据name
getName
查找
ArrayList
元素。解决这一问题的两种方法:

1-不要使用
ArrayList
,使用
HashMap
,其中
String
将是名称

2-使用
getName
生成索引,并在数组列表
列表中使用基于索引的添加。添加(int-index,E元素)
。从name生成索引的一种方法是使用它的hashCode和modulo by
ArrayList
当前大小(类似于
HashMap
中使用的内容)

for(int i=0;i
我认为for循环应该是一个有效的解决方案:

    public int getIndexByname(String pName)
    {
        for(AuctionItem _item : *yourArray*)
        {
            if(_item.getName().equals(pName))
                return *yourarray*.indexOf(_item)
        }
        return -1;
    }

您可以实现
拍卖项目
hashCode
/
equals
,这样,如果它们具有相同的名称,则其中两个是相等的。执行此操作时,可以使用
ArrayList的
indexOf
contains
方法,如下所示:
ArrayList.indexOf(新拍卖项目(“名称”)
。或者当您在equals方法中假设传递了一个字符串时:
arrayList.indexOf(“名称”)
。但这不是最好的设计


但我也更喜欢使用
HashMap
将名称映射到项目。

而不是在列表中使用蛮力循环(例如1到10000),而是使用迭代搜索方法: 列表需要按要测试的元素排序

从中间元素大小()开始搜索/2例如5000 如果搜索项大于5000处的元素,则在上限(10000)和中点(5000)-7500之间的中点测试元素

继续这样做,直到你达到比赛(或使用蛮力循环,一旦你到达一个较小的范围(如20个项目)

您可以在大约13到14个测试中搜索10000个列表,而不是可能的9999个测试。

.indexOf()工作得很好。 如果您想要一个例子,这里有一个:

  ArrayList<String> example = new ArrayList<String>();
  example.add("AB");
  example.add("CD");
  example.add("EF");
  example.add("GH");
  example.add("IJ");
  example.add("KL");
  example.add("MN");

  System.out.println("Index of 'AB': "+example.indexOf("AB"));
  System.out.println("Index of 'KL': "+example.indexOf("KL"));
  System.out.println("Index of 'AA': "+example.indexOf("AA"));
  System.out.println("Index of 'EF': "+example.indexOf("EF"));

注意:如果指定的元素不在列表中,此方法将返回-1。

Life saver…非常感谢:)
  ArrayList<String> example = new ArrayList<String>();
  example.add("AB");
  example.add("CD");
  example.add("EF");
  example.add("GH");
  example.add("IJ");
  example.add("KL");
  example.add("MN");

  System.out.println("Index of 'AB': "+example.indexOf("AB"));
  System.out.println("Index of 'KL': "+example.indexOf("KL"));
  System.out.println("Index of 'AA': "+example.indexOf("AA"));
  System.out.println("Index of 'EF': "+example.indexOf("EF"));
Index of 'AB': 0
Index of 'KL': 5
Index of 'AA': -1
Index of 'EF': 2