2014-04-21 117 views
3

我有Animal類型的ArrayList。該列表包含10個對象的引用,它們是3個狗,3個貓和4個鳥。所有三種類型(DogCatBird)都從Animal繼承。動物的訂單從ArrayList獲取特定類型的第一個元素

是否有更有效的方法從列表中獲得第一個Cat而不是迭代整個列表並使用instanceof運算符?

例如,

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

回答

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 S和最後的Bird S) ,那麼不,沒有更好的辦法。

相關問題