欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

集合遍历中的算法思想

程序员文章站 2022-05-29 09:21:35
...

集合是我们日常开发中常用的数据存储结构,遍历集合元素也是我们日常开发中所少不了的。

最近笔者在工作中用到的一个开发项目,对10万条数据的集合便利做数据解析。处理流程如下:
集合遍历中的算法思想

每次导出数据大致在100万条左右,分成十个左右的集合,并发的去导出,整个流程下来耗时80s左右。

速率的优化已经迫在眉睫。

通过在代码中增加日志观察各个流程的时间节点,却发现耗时最严重的是只有一个for循环的业务处理。耗时40s。
代码示例1

for(int i=0;i< models.size();i++){
  Model model  = models.get(i);
  // .....
}

由于业务代码中需要用到下标,故用了这种方式遍历。相信有经验的道友已经发现了这段代码的问题。

代码示例2

int i = 0;
for(Model model : models){
 
  // .....
  i++;
}

这是笔者优化后的代码,耗时1s不到。不知道友们是否观察出区别?

这里重点在于集合元素的获取方式,第一种方式,models.get(i)每次单独从集合中获取元素,时间复杂度达到了O(n),并上外部的for循环,整个遍历时间复杂度达到了O(n^2);而第二种方式,通过增强的for循环,在第一次循环时直接取出元素,时间复杂度为O(n)。在数据量较大时,性能差别尤其大。

数据结构应用在方方面面,希望对大家能有所启迪。

相关标签: 随笔