2013-04-15 37 views
2

從數組中獲取選定對象的最快方法是什麼?Java新陣列其中對象值true,mysql'where'語法陣列

MyObject[] objects = new MyObject[]{new MyObject(true), new MyObject(false)}; 
MyObject[] selectedObjects = ??? 

難道還有比一個更快的方法:

ArrayList<MyObject> selObjectsList = new ArrayList<MyObject>(); 
for(MyObject obj : objects){ 
    if(obj.isSelected()){ 
     selObjectsList.add(obj); 
    } 
} 
selectedObjects = selObjectsList.toArray(new MyObject[0]); 

這是很多線一個簡單的操作,是否有操作更短的做同樣的?

+0

這將有助於http://stackoverflow.com/questions/2082449/how-to-filter-an-array-in-java – JRR

+0

你可以通過減少所需的行數來使代碼更簡潔,但是你不會比O(n)迭代更快地找到任何東西。 – Perception

回答

3

與標準庫,有做它沒有(fundamentaly)更合適的方法。但有許多第三方庫有filterpredicate支持。想起了Google Collections。而且我也聽到了關於LambdaJ的好消息。希望Java 8能夠提高性能!

隨着LambdaJ它可能是這個樣子:

select(myList, having(on(MyObject.class).isSelected())); 

編輯我解釋「最快」爲最短的行數。如果是你想到的表現,這個答案可能不合適。

+0

+1解釋解釋和警告。 –

+1

我在我的代碼中多次使用它,但它總是隻執行一次,所以大O無關緊要。現在代碼變得更可讀;) – Jetse

0

不幸的是,沒有。如果您使用的是ArrayList,它是一個線性列表,那麼您正在有效地強制進行線性搜索。

如果你想提高查找,那麼你可以使用像一個地圖,將允許更快的查找,但你將不得不使用一個智能的方法來設置鍵。例如,如果您查詢訂單,則可以使用訂單號作爲關鍵字。

0

使用地圖。

Map<Boolean, List<MyObject>> someMap; 

然後,您可以執行以下操作來檢索所選「MyObjects」的列表。

someMap.get(true); 

並填充...

someMap.put(myObjectInstance.isSelected(), myObjectInstance);