获取arraylist中项目的索引;

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

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

有没有更好的办法?

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

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

是的,你必须循环它

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

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

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

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

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

.indexOf()效果很好。 如果你想在这里有一个例子是一个:

  ArrayList example = new ArrayList(); 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。

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

是循环(使用索引或Iterator )。 在返回值上,根据您的需要返回其索引或项目iteself。 ArrayList没有indexOf (Object target, Comparator compare)`或类似的。 现在Java正在获取lambda表达式(在Java 8中,〜2014年3月),我希望我们会看到API获取接受lambdas的方法,就像这样。

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

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

而不是通过列表的暴力循环(例如1到10000),而是使用迭代搜索方法:List需要按要测试的元素进行排序。

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

继续这样做直到你达到匹配(或者一旦你到达较小的范围(例如20个项目)使用暴力循环)

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