获取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
,这样如果它们具有相同的名称,则它们中的两个是相等的。 执行此操作时,您可以使用方法indexOf
并contains
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个测试。