循環反思-for循環的濫用

本博剛剛從學校畢業,剛進去公司工作也已經接近兩個月了。

最近我的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。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章