我正在搜索 java ArrayList 源代码,以查看将列表转换为数组时会发生什么。我遇到了我使用过的方法 contains 并且知道,我对该方法的第一反应是, contains 方法使用哪种算法。
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?