猿问

使用参数构建多个对象并将它们传递到更多对象以添加到列表中的最有效方法

我构建了一个非常慢的对象列表,我需要提高构建列表的速度。添加到列表中的对象本身具有多个子对象,通常为 3 个对象,根据剩余要添加的数据量更改为 2 或 1。


我打算构建一个子对象数据 bean,因为传递的参数大部分相同,只有子对象发生变化。我相信有一种比我列出清单的方式更有效的方法。


这是我现在的代码:


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;

参数“this、bBool、tabs”都是类变量并且始终相同。我确实知道最后一个 else 条件在大多数情况下都会运行,因此这可能应该是 if 语句中的第一个条件,但我宁愿找到一种更好的方法来一起构建列表。


慕标5832272
浏览 141回答 3
3回答

德玛西亚99

检查 getDataList() 返回的列表类型;对于您的用例来说,它必须是 ArrayList - 如果它是 Linkedlist,则获取索引调用会很繁重且耗时将 limit-1 和 limit-2 情况移出 for 循环并退出循环 limit-2 本身。

哆啦的时光机

您不需要将新的 MainObject 分配给变量将 MainObjects 列表更改为 LinkedList。添加操作对于 LinkedList 来说更有效,因为 ArrayList 必须在数组满时重建数组 - 它非常耗时(或者只是创建具有限制大小的 ArrayList:new ArrayList<>(limit);)getDataList() 方法应返回 LinkedList

慕尼黑8549860

对于您的limit = 100,显示的代码中没有任何内容可能会很慢。您当然可以进行一些低级优化,如 Srini 提出的(“将 limit-1 和 limit-2 情况移到外部”),但罪魁祸首在其他地方:要么在构造函数中,要么在dataList::get.作为一个快速技巧,请dataList = new ArrayList<>(dataList)在循环之前尝试。
随时随地看视频慕课网APP

相关分类

Java
我要回答