我正在搜索java ArrayList源代码,看看当我将列表转换为数组时会发生什么。 我遇到了方法包含我已经使用过分配和了解的方法,我对方法的第一反应是,包含方法使用了什么算法。
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方法时,它可能会成为问题。
我能想到的一个改进是使用二进制搜索。 仅在项目已排序时。 因此,您需要在从数据库添加/查询项目时订购项目,或者在启动应用程序时不使用db命令。
为特定场景使用不同的集合是更好还是使用其中一个util类搜索ArrayList?
答案 0 :(得分:2)
不同的容器提供不同的性能保证和不同的时空权衡。
我的建议是:
这将帮助您在使用哪个容器以及如何最好地使用它时做出明智的选择。