我有一个名为AuctionItem
的班级。 AuctionItem
类有一个名为getName()
的方法,它返回String
。如果我的ArrayList
类型为AuctionItem
,那么返回ArrayList
中具有特定名称的项目索引的最佳方式是什么?
我知道有一个.indexOf()
功能。该函数的参数是一个对象。要查找具有名称的项目,我应该只使用for循环,当找到该项目时,返回ArrayList
中的元素位置?
有更好的方法吗?
答案 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
的方法indexOf
和contains
,如下所示:ArrayList
。或者,当您在equals方法中假设传递了一个String时:arrayList.indexOf(new AuctionItem("The name"))
。但那不是最好的设计。
但我也希望使用arrayList.indexOf("The name")
将名称映射到项目。