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
基本上,您需要根据namegetName
查找ArrayList
元素。解决这一问题的两种方法:
1-不要使用ArrayList
,使用HashMap
,其中String
将是名称
2-使用getName
生成索引,并在数组列表列表中使用基于索引的添加。添加(int-index,E元素)
。从name生成索引的一种方法是使用它的hashCode和modulo byArrayList
当前大小(类似于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