本博刚刚从学校毕业,刚进去公司工作也已经接近两个月了。
最近我的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方法,这样就能减少循环的次数,虽然也是万级别的,但是比亿级别快多了。
- System.out.println("通过Map.entrySet遍历key和value");
- for (Map.Entry<String, String> entry : map.entrySet()) {
- System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
- }
当需要遍历hashmap的时候,请尽量使用entrySet,而不要用keySet,entrySet的效率要比keySet高,实际上使用 entrySet是只需要遍历一次hash,即将key和value的映射关系放入到entry中,再取之;而keySet需要两次遍历hash,第一次 取所有的key,第二次用key去取出对应的value。