从ArrayList中获取特定类型的第一个元素

3
我有一个类型为AnimalArrayList。这个列表包含10个对象引用,其中3只狗,3只猫和4只鸟。所有三种动物(DogCatBird)都继承自Animal。动物的顺序如下。
有没有比迭代整个列表并使用instanceof运算符更有效的方法来获取列表中第一个Cat
例如:
Cat cat = null;
for(Animal animal: animalsList){
   if( animal instanceof Cat){
       cat = animal;
       break;
   }
}
3个回答

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;
}

如果您需要更快的搜索速度,您需要使用不同的数据结构。

0
创建一个类,不断跟踪列表中第一个Cat对象。否则,这种搜索是从列表中获取第一个Cat对象最有效的方法。

0

如果您没有关于数组中 Cat 的位置或者其他有关数组构成的信息(例如,所有的 Dog 都在前面,然后是 Cat,最后是 Bird),那么没有更好的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接