在获取一个ArrayList的项目的索引;(Getting Index of an item in

2019-09-02 02:02发布

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

我知道,有一个.indexOf()函数。 此函数的参数是一个对象。 为了找到具有名称的项目,应我只是用一个for循环,并且当物品被找到,返回的元素位置ArrayList

有没有更好的办法?

Answer 1:

我认为,一个for循环应该是一个有效的解决方案:

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


Answer 2:

Yes.you要循环播放

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


Answer 3:

基本上你需要查找ArrayList基于name元素getName 。 有两种方法解决这个问题:

1,不要使用ArrayList ,使用HashMap<String,AutionItem>其中String是名

2-使用getName以生成索引并使用索引基于在添加到数组列表list.add(int index, E element) 。 以从名称索引的一种方法是通过使用它的hashCode和模ArrayList电流大小(类似于里面是什么东西使用HashMap



Answer 4:

for (int i = 0; i < list.length; i++) {
   if (list.get(i) .getName().equalsIgnoreCase("myName")) {
    System.out.println(i);
    break;
  }
}


Answer 5:

.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"));

会给你的输出

Index of 'AB': 0
Index of 'KL': 5
Index of 'AA': -1
Index of 'EF': 2

注意:此方法返回-1如果指定的元素没有出现在列表中。



Answer 6:

为了找到具有名称的项目,应我只是用一个for循环,并且当物品被找到,返回ArrayList中元素的位置?

是可将循环(使用索引或Iterator )。 在返回的值,要么返回其索引,或者根据您的需要的项目iteself。 ArrayList不具有indexOf (对象的目标, 比较比较)`或相似。 现在,Java正在让(在Java中8〜2014年3月)lambda表达式,我预计我们将看到的API得到接受这样的事情lambda表达式的方法。



Answer 7:

您可以实现hashCode / equals你的AuctionItem让他们两个人都是平等的,如果他们具有相同的名称。 当你这样做,你可以使用的方法indexOfcontains的的ArrayList是这样的: arrayList.indexOf(new AuctionItem("The name")) 或者当你在equals方法假定字符串传递: arrayList.indexOf("The name") 但是,这不是最好的设计。

但我也宁愿使用HashMap映射名称的项目。



Answer 8:

而不是通过列表(例如1〜10000)强力循环,而使用迭代搜索的方法:清单需要由元件进行排序来进行测试。

在中间元件尺寸()/ 2例如5000开始搜索,如果搜索项比元件更大的在5000,则在(10000)(5000)上的中点和中点测试元件 - 7500

继续这样做,直到你到达匹配(或通过使用蛮力循环,一旦你到一个较小的范围内(如20项)

您可以在大约13至14测试搜索的10000列表,而不是潜在的9999测试。



文章来源: Getting Index of an item in an arraylist;