java中三个for循环嵌套查询,每个集合的size()大小不同?取值做判断,会产生许多冗余数据?如何避免?

timeList.size()是66,callBarsList.size()是22,currentList.size()是20;分别取值做判断,会循环好多遍,如何能够控制... timeList.size()是66,callBarsList.size()是22,currentList.size()是20;
分别取值做判断,会循环好多遍,如何能够控制循环的次数,只让满足条件的数据循环一遍?求高手解答!

for (int j = 0; j < timeList.size(); j++) {
for (int k = 0; k < callBarsList.size(); k++) {
for (int k2 = 0; k2 < currentList.size(); k2++) {
int timeWeekMonth = timeList.get(j).getWeekendingmonth();
int timeWeekDay = timeList.get(j).getWeekendingday();
int current = currentList.get(k2).getCurrentID();
if (callBarsList.get(k).getWeek() == timeList.get(j).getWeek()
&& callBarsList.get(k).getYear().intValue() == timeList.get(j).getYear().intValue()
&& current == callBarsList.get(k).getId()) {
Integer count = callBarsList.get(k).getCount();
String description = callBarsList.get(k).getDescription();
String theDate = timeWeekMonth + "/" + timeWeekDay;
dataset.setValue(count, description, theDate);
}else{
String description=callBarsList.get(k).getDescription();
String theDate= timeWeekMonth+"/"+timeWeekDay;
dataset.setValue(0,description, theDate);
}
}
}
}
展开
 我来答
mohunk10
2013-08-30 · TA获得超过754个赞
知道小有建树答主
回答量:466
采纳率:100%
帮助的人:449万
展开全部
这个三重循环肯定会降低性能。循环次数是66*22*20次。另外计算集合的大小应该放到循环外边声明,避免每次循环都重新计算其大小。如果你用的jdk版本是5.0以上,建议你用for-each循环结构。
改良的代码如下:循环次数是66+22+20
Map<String, CallBars> callBarMap = new HashMap<String, CallBars>();
int callBarsize = callBarsList.size();
for (int k = 0; k < size; k++) {
map.put( callBarsList.get(k).getWeek() +","+callBarsList.get(k).getYear().intValue(), callBarsList.get(k));
}
Map<Integer, Current> currentMap = new HashMap<Integer, Current>();
int currentSize = currentList.size();
for (int k2 = 0; k2 < currentSize; k2++){
currentMap.put(currentList.get(k2).getCurrentID(),currentList.get(k2));
}
int timeSize = timeList.size();
for (int j = 0; j < timeSize; j++) {
int timeWeekMonth = timeList.get(j).getWeekendingmonth();
int timeWeekDay = timeList.get(j).getWeekendingday();
CallBars callBars =map.get(timeList.get(j).getWeek()+","+timeList.get(j).getYear().intValue);
if(callBars !=null){
Current current = currentMap.get(callBars.getId());
if(current!=null){
Integer count = callBars.getCount();
String description = callBars.getDescription();
String theDate = timeWeekMonth + "/" + timeWeekDay;
dataset.setValue(count, description, theDate);
}else{
String description=callBars.getDescription(); String theDate= timeWeekMonth+"/"+timeWeekDay;
dataset.setValue(0,description, theDate);
}
}
}

}
追问
太感激你了,但这样只是计算出了符合条件的数据,那么,我那个if判断符合的加入dataset结果集,不符合的没有执行啊?应该怎么改动,让它执行,如我上面代码的if,else执行条件?
追答
继续回答限制字数,粘贴的代码超过限制了。你再重新提问一个,我把代码粘给你。
凡特希科技
2013-08-30 · TA获得超过336个赞
知道小有建树答主
回答量:303
采纳率:0%
帮助的人:71.6万
展开全部
用缓存的原理,并将已经满足了的数据,就不要出现的下一次循环里面
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hebeixiaogu
2013-08-30 · TA获得超过115个赞
知道小有建树答主
回答量:152
采纳率:0%
帮助的人:113万
展开全部
定义一个三维数组,分别放timeList.size()是66,callBarsList.size()是22,currentList.size()是20;他们的值。遍历三维数组判断。
追问
能给出具体的代码吗?我不会使用三维数组!多谢帮助啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Stale331x
2013-08-30 · TA获得超过1299个赞
知道小有建树答主
回答量:1276
采纳率:33%
帮助的人:825万
展开全部
你的代码想实现的是什么样的功能。。。
代码一堆,又没注释
追问
主要是三个for循环嵌套查询,分别取出里面的week、year、ID做判断,符合数据的加入JfreeChart的dataset结果集!但是这样做三个集合的大小不同,循环的次数太多,会产生很多冗余数据,有没有好的办法让符合或不符合的数据只循环加入一次结果集!能看懂吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式