循环反思-for循环的滥用

来源:互联网 发布:淘宝旺铺基础版模板 编辑:程序博客网 时间:2024/06/06 09:53

本博刚刚从学校毕业,刚进去公司工作也已经接近两个月了。

最近我的pl分配了一个功能给我,主要涉及到了两个bean,然后两个bean都有一个projectID,然后我要做的就是通过匹配相同的projectID,把两个bean合并成一个bean反馈给前端,让前端显示相关功能。

一开始思路

for(int i = 0;i<bean1.size();i++){  Bean1 bean = bean1.get(i);  //do something  for(j = 0;i<bean2.size();j++){  if(baan.getProjectId==bean2.get(j).getProjectId)  //do something  }  



一开始的觉得不什么事,因为我测试的时候都是用小数据来测试,速度还算可以,但是一旦数据是大数据的时候,这个循环就坏了,比如bean1是万级别的,bean2也是万级别的,这个循环就等于是亿级别的,这个循环的话没半小时干不完。

因此,在后面我选择了用hashmap的entrySet方法,这样就能减少循环的次数,虽然也是万级别的,但是比亿级别快多了。

  1.   System.out.println("通过Map.entrySet遍历key和value");  
  2.   for (Map.Entry<String, String> entry : map.entrySet()) {  
  3.    System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());  
  4.   }  

当需要遍历hashmap的时候,请尽量使用entrySet,而不要用keySet,entrySet的效率要比keySet高,实际上使用 entrySet是只需要遍历一次hash,即将key和value的映射关系放入到entry中,再取之;而keySet需要两次遍历hash,第一次 取所有的key,第二次用key去取出对应的value。