获取arraylist中项目的索引;

时间:2013-05-06 07:07:35

标签: java arraylist find element indexof

我有一个名为AuctionItem的班级。 AuctionItem类有一个名为getName()的方法,它返回String。如果我的ArrayList类型为AuctionItem,那么返回ArrayList中具有特定名称的项目索引的最佳方式是什么?

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

有更好的方法吗?

7 个答案:

答案 0 :(得分:16)

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

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

答案 1 :(得分:14)

是的。你必须循环它

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

答案 2 :(得分:6)

基本上,您需要根据名称ArrayList查找getName元素。解决这个问题的两种方法:

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

2-使用getName生成索引并使用基于索引的添加到数组列表list.add(int index, E element)中。从名称生成索引的一种方法是使用其hashCode和ArrayList当前大小的模数(类似HashMap中使用的内容)

答案 3 :(得分:2)

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

答案 4 :(得分:1)

.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。

答案 5 :(得分:0)

  

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

循环是(使用索引或Iterator)。在返回值上,根据您的需要返回其索引或项目iteself。 ArrayList没有indexOf(对象定位,Comparator比较)`或类似内容。既然Java正在获得lambda表达式(在Java 8中,〜2014年3月),我希望我们会看到API获取接受lambdas的方法。

答案 6 :(得分:0)

您可以实施hashCode的{​​{1}} / equals,这样如果它们具有相同的名称,则其中两个相等。执行此操作时,您可以使用AuctionItem的方法indexOfcontains,如下所示:ArrayList。或者,当您在equals方法中假设传递了一个String时:arrayList.indexOf(new AuctionItem("The name"))。但那不是最好的设计。

但我也希望使用arrayList.indexOf("The name")将名称映射到项目。