我ArrayList
类型为Animal
。此列表包含10个对象,即3只狗,3只猫和4只鸟。所有三种类型(Dog
,Cat
和Bird
)都来自Animal
。动物的顺序
从列表中获取第一个Cat
比使用instanceof
运算符迭代整个列表更有效吗?
例如
Cat cat = null;
for(Animal animal: animalsList){
if( animal instanceof Cat){
cat = animal;
break;
}
}
答案 0 :(得分:3)
不,就您需要执行的操作而言,这是最快的:搜索ArrayList
特定对象始终是线性的(即O(n)
)。
但是,就可读性而言,您可以通过将搜索隐藏在一个带有列表和类型的辅助方法中来改进,并找到该项的第一个匹配项:
public static <E> E findFirst(List<E> list, Class<E> itemType) {
for (E element : list) {
if (itemType.isInstance(element)) {
return element;
}
}
return null;
}
如果您的搜索速度要快于此速度,则需要使用不同的数据结构。
答案 1 :(得分:0)
创建一个不断跟踪列表中第一个Cat
对象的类。否则,此搜索是从列表中获取第一个Cat
对象的最强 高效 方式。
答案 2 :(得分:0)
如果您对阵列中Cat
的位置没有其他先验知识,或者有关阵列化妆的任何其他信息(例如,所有Dog
s先到,然后是Cat
s,最后是Bird
s,那么不,没有更好的方法。