java中三个for循环嵌套查询,每个集合的size()大小不同?取值做判断,会产生许多冗余数据?如何避免?timeList.size()是66,callBarsList.size()是22,currentList.size()是20;分别取值做判断,会循环好多遍,如何能
来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/28 21:15:07
java中三个for循环嵌套查询,每个集合的size()大小不同?取值做判断,会产生许多冗余数据?如何避免?timeList.size()是66,callBarsList.size()是22,currentList.size()是20;分别取值做判断,会循环好多遍,如何能
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);
}
}
}
}
java中三个for循环嵌套查询,每个集合的size()大小不同?取值做判断,会产生许多冗余数据?如何避免?timeList.size()是66,callBarsList.size()是22,currentList.size()是20;分别取值做判断,会循环好多遍,如何能
这个三重循环肯定会降低性能.循环次数是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);
}
}
}
}