为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕标5832272 2023-11-01 21:01:44
我构建了一个非常慢的对象列表,我需要提高构建列表的速度。添加到列表中的对象本身具有多个子对象,通常为 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 语句中的第一个条件,但我宁愿找到一种更好的方法来一起构建列表。
查看完整描述

3 回答

?
德玛西亚99

TA贡献1770条经验 获得超3个赞

  1. 检查 getDataList() 返回的列表类型;对于您的用例来说,它必须是 ArrayList - 如果它是 Linkedlist,则获取索引调用会很繁重且耗时

  2. 将 limit-1 和 limit-2 情况移出 for 循环并退出循环 limit-2 本身。


查看完整回答
反对 回复 2023-11-01
?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

  1. 您不需要将新的 MainObject 分配给变量

  2. 将 MainObjects 列表更改为 LinkedList。添加操作对于 LinkedList 来说更有效,因为 ArrayList 必须在数组满时重建数组 - 它非常耗时(或者只是创建具有限制大小的 ArrayList:new ArrayList<>(limit);)

  3. getDataList() 方法应返回 LinkedList


查看完整回答
反对 回复 2023-11-01
?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

对于您的limit = 100,显示的代码中没有任何内容可能会很慢。您当然可以进行一些低级优化,如 Srini 提出的(“将 limit-1 和 limit-2 情况移到外部”),但罪魁祸首在其他地方:要么在构造函数中,要么在dataList::get.

作为一个快速技巧,请dataList = new ArrayList<>(dataList)在循环之前尝试。


查看完整回答
反对 回复 2023-11-01
  • 3 回答
  • 0 关注
  • 59 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信