我構建了一個非常慢的對象列表,我需要提高構建列表的速度。添加到列表中的對象本身具有多個子對象,通常為 3 個對象,根據(jù)剩余要添加的數(shù)據(jù)量更改為 2 或 1。我打算構建一個子對象數(shù)據(jù) bean,因為傳遞的參數(shù)大部分相同,只有子對象發(fā)生變化。我相信有一種比我列出清單的方式更有效的方法。這是我現(xiàn)在的代碼:List<MainObject> list = new ArrayList();List<Data> dataList = getDataList();MainObject mainObject;int limit = 100;for(int i = 0; i < limit; i += 3) { if(i == limit - 1) { list.add(mainObject = new MainObject(new SubObject(dataList.get(i), this, bBool, tabs))); }else if(i == limit - 2) { list.add(mainObject = new MainObject(new SubObject(dataList.get(i), this, bBool, tabs), new SubObject(dataList.get(i +1), this, bBool, tabs))); }else { list.add(mainObject = new MainObject(new SubObject(dataList.get(i), this, bBool, tabs), new SubObject(dataList.get(i +1), this, bBool, tabs), new SubObject(dataList.get(i +2), this, bBool, tabs))); }}return list;參數(shù)“this、bBool、tabs”都是類變量并且始終相同。我確實知道最后一個 else 條件在大多數(shù)情況下都會運行,因此這可能應該是 if 語句中的第一個條件,但我寧愿找到一種更好的方法來一起構建列表。
3 回答

德瑪西亞99
TA貢獻1770條經驗 獲得超3個贊
檢查 getDataList() 返回的列表類型;對于您的用例來說,它必須是 ArrayList - 如果它是 Linkedlist,則獲取索引調用會很繁重且耗時
將 limit-1 和 limit-2 情況移出 for 循環(huán)并退出循環(huán) limit-2 本身。

哆啦的時光機
TA貢獻1779條經驗 獲得超6個贊
您不需要將新的 MainObject 分配給變量
將 MainObjects 列表更改為 LinkedList。添加操作對于 LinkedList 來說更有效,因為 ArrayList 必須在數(shù)組滿時重建數(shù)組 - 它非常耗時(或者只是創(chuàng)建具有限制大小的 ArrayList:new ArrayList<>(limit);)
getDataList() 方法應返回 LinkedList

慕尼黑8549860
TA貢獻1818條經驗 獲得超11個贊
對于您的limit = 100
,顯示的代碼中沒有任何內容可能會很慢。您當然可以進行一些低級優(yōu)化,如 Srini 提出的(“將 limit-1 和 limit-2 情況移到外部”),但罪魁禍首在其他地方:要么在構造函數(shù)中,要么在dataList::get
.
作為一個快速技巧,請dataList = new ArrayList<>(dataList)
在循環(huán)之前嘗試。
添加回答
舉報
0/150
提交
取消