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

时间:2014-04-21 19:20:50

标签: java list collections arraylist

ArrayList类型为Animal。此列表包含10个对象,即3只狗,3只猫和4只鸟。所有三种类型(DogCatBird)都来自Animal。动物的顺序

从列表中获取第一个Cat比使用instanceof运算符迭代整个列表更有效吗?

例如

Cat cat = null;
for(Animal animal: animalsList){
   if( animal instanceof Cat){
       cat = animal;
       break;
   }
}

3 个答案:

答案 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,那么不,没有更好的方法。