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

题目:

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

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);

}

}

}

}

解答:

这个三重循环肯定会降低性能.循环次数是66*22*20次.另外计算集合的大小应该放到循环外边声明,避免每次循环都重新计算其大小.如果你用的jdk版本是5.0以上,建议你用for-each循环结构.

改良的代码如下:循环次数是66+22+20

Map callBarMap = new HashMap();

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 currentMap = new HashMap();

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执行条件?

再答: 继续回答限制字数,粘贴的代码超过限制了。你再重新提问一个,我把代码粘给你。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值