【问题标题】:Getting first element of specific type from ArrayList从 ArrayList 获取特定类型的第一个元素
【发布时间】:2014-04-21 19:20:49
【问题描述】:

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

有没有比迭代整个列表并使用instanceof 运算符更有效的方法从列表中获取第一个Cat

例如。

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

【问题讨论】:

    标签: java list collections arraylist


    【解决方案1】:

    不,就您需要执行的操作而言,这是最快的速度:在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;
    }
    

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

    【讨论】:

      【解决方案2】:

      创建一个持续跟踪列表中第一个Cat 对象的类。否则,此搜索是从列表中获取第一个 Cat 对象的最高效方法。

      【讨论】:

        【解决方案3】:

        如果您不知道阵列中Cats 的位置,或有关阵列构成的任何其他信息(例如,所有Dogs 先出现,然后Cats 和最后是Birds),然后不,没有更好的方法。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-07-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-07-20
          • 1970-01-01
          • 2011-03-13
          • 2023-03-29
          相关资源
          最近更新 更多