我有一個類叫做AuctionItem
。 AuctionItem
類有一個名爲getName()
的方法,返回String
。如果我有ArrayList
類型AuctionItem
,返回ArrayList
中具有特定名稱的項目索引的最佳方法是什麼?我知道.indexOf()
函數。這個函數的參數是一個對象。要找到具有名稱的項目,我應該只使用for循環,並且找到該項目後,返回ArrayList
中的元素位置?獲取數組列表中項目的索引;
有沒有更好的方法?
我有一個類叫做AuctionItem
。 AuctionItem
類有一個名爲getName()
的方法,返回String
。如果我有ArrayList
類型AuctionItem
,返回ArrayList
中具有特定名稱的項目索引的最佳方法是什麼?我知道.indexOf()
函數。這個函數的參數是一個對象。要找到具有名稱的項目,我應該只使用for循環,並且找到該項目後,返回ArrayList
中的元素位置?獲取數組列表中項目的索引;
有沒有更好的方法?
要找到具有名稱的項目,我應該只使用for循環,並且找到該項目時,返回ArrayList中的元素位置?
是的循環(使用索引或Iterator
)。在返回值上,根據需要返回其索引或項目iteself。 ArrayList
沒有indexOf
(對象目標,Comparator比較)`或類似的。現在Java已經獲得了lambda表達式(在Java 8中,〜2014年3月),我希望我們會看到APIs接受lambda表達式的方法。
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;
}
基本上你需要基於名稱getName
查找ArrayList
元素。有兩種方法解決這個問題:
1,不要使用ArrayList
,使用HashMap<String,AutionItem>
其中String
將被命名
2 - 使用getName
生成指數和指數使用基於在添加到數組列表list.add(int index, E element)
。以從名稱索引的一種方法是通過ArrayList
電流大小(裏面是什麼HashMap
使用類似的東西)來使用它的hashCode和模
for (int i = 0; i < list.length; i++) {
if (list.get(i) .getName().equalsIgnoreCase("myName")) {
System.out.println(i);
break;
}
}
我覺得一個for循環應該是一個有效的解決方案:
public int getIndexByname(String pName)
{
for(AuctionItem _item : *yourArray*)
{
if(_item.getName().equals(pName))
return *yourarray*.indexOf(_item)
}
return -1;
}
你可以實現你的AuctionItem
的hashCode
/equals
,這樣如果它們中的兩個名稱相同,它們是相等的。當你這樣做時,你可以使用ArrayList
的indexOf
和contains
這樣的方法: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測試
+1使用HashMap – Kai 2013-05-06 07:24:47