我正在通過java ArrayList源代碼進行搜索,以查看將列表轉換爲數組時發生了什麼。 我遇到了包含我使用分配和知道的方法,我對該方法的第一個反應是,包含方法使用哪種算法。Java列表包含方法
public boolean contains(Object o) {
return indexOf(o) >= 0;
}
public int indexOf(Object o) {
if (o == null) {
for (int i = 0; i < size; i++)
if (elementData[i]==null)
return i;
} else {
for (int i = 0; i < size; i++)
if (o.equals(elementData[i]))
return i;
}
return -1;
}
上面從源代碼中提取的代碼顯示ArrayLists正在使用順序搜索。 我看到很多人自己使用contains方法。 我認爲這是一個很好的例子,人們需要知道算法和Java集合。當你坐在一個包含大量項目的列表中時,每次使用應用程序時都會調用contains方法,這可能會成爲一個問題。
我能想到的一個改進就是使用二分查找。 僅當物品被分類時。 因此,您需要在從數據庫添加/查詢項目時訂購項目,或者在啓動應用程序時不使用數據庫訂單。
爲特定場景使用不同的集合還是使用其中一個util類來搜索ArrayList是更好?
歡迎來到SO。請閱讀[FAQ]和[Ask]。提示:SO不是論壇,你沒有提出具體的問題,所以這篇文章可能會被封爲「不是真正的問題」。 –
你有真正的問題嗎? – 2013-01-04 08:52:05
我的意見:如果你有一個巨大的表現,表現開始傷害,你已經做錯了。 – Gimby