我有一个名为类AuctionItem
。 该AuctionItem
类有一个叫做方法getName()
返回一个String
。 如果我有一个ArrayList
类型AuctionItem
,什么是返回一个项目的索引中的最佳方式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;
}
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;
}
基本上你需要查找ArrayList
基于name元素getName
。 有两种方法解决这个问题:
1,不要使用ArrayList
,使用HashMap<String,AutionItem>
其中String
是名
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<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如果指定的元素没有出现在列表中。
为了找到具有名称的项目,应我只是用一个for循环,并且当物品被找到,返回ArrayList中元素的位置?
是可将循环(使用索引或Iterator
)。 在返回的值,要么返回其索引,或者根据您的需要的项目iteself。 ArrayList
不具有indexOf
(对象的目标, 比较比较)`或相似。 现在,Java正在让(在Java中8〜2014年3月)lambda表达式,我预计我们将看到的API得到接受这样的事情lambda表达式的方法。
您可以实现hashCode
/ equals
你的AuctionItem
让他们两个人都是平等的,如果他们具有相同的名称。 当你这样做,你可以使用的方法indexOf
和contains
的的ArrayList
是这样的: arrayList.indexOf(new AuctionItem("The name"))
或者当你在equals方法假定字符串传递: arrayList.indexOf("The name")
但是,这不是最好的设计。
但我也宁愿使用HashMap
映射名称的项目。
而不是通过列表(例如1〜10000)强力循环,而使用迭代搜索的方法:清单需要由元件进行排序来进行测试。
在中间元件尺寸()/ 2例如5000开始搜索,如果搜索项比元件更大的在5000,则在(10000)(5000)上的中点和中点测试元件 - 7500
继续这样做,直到你到达匹配(或通过使用蛮力循环,一旦你到一个较小的范围内(如20项)
您可以在大约13至14测试搜索的10000列表,而不是潜在的9999测试。