首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

java中的一个统计有关问题不知该怎么写运行效率比较高

2012-05-13 
java中的一个统计问题不知该如何写运行效率比较高?问题详情1. 有对象Java codeimport java.util.Datepubl

java中的一个统计问题不知该如何写运行效率比较高?
问题详情
1. 有对象

Java code
import java.util.Date;public class Disple {    private Date time;    private int number;    public Date getTime() {        return time;    }    public void setTime(Date time) {        this.time = time;    }    public int getNumber() {        return number;    }    public void setNumber(int number) {        this.number = number;    }}

2. Case

public class Test{
  private List<Disple> disple_ls = new ArrayList<Disple>();
}
3 . 该集合中有 n 个 Disple 实体对象,如果多个实体中的 time 属性的值相等,那么把这些实体对象中的 number 全累加起来
,组合成一个新的 Disple , 并添加到集合里。

本人有一个笨拙的写法,效率不好,代码也很难看。希望给位路过的高手指点一二. 其中传进去的 集合 中放的结果 是根据time排过序的 ,该结果集由数据库查出...

Java code
import java.util.ArrayList;import java.util.List;public class Silmpe {    public List<Disple> disple_summary(List<Disple> list_ds) {        List<Disple> list_dres = new ArrayList<Disple>();        for (int i = 0; i < list_ds.size(); i++) {            Disple dis = list_ds.get(i);            int _tmp = 0;            boolean flag = false;            Disple dis_res = new Disple();            if ((i + 1) != list_ds.size()) {                if (dis.getTime() == list_ds.get(i + 1).getTime()) {                    _tmp += dis.getNumber();                    flag = true;                } else {                    dis_res.setTime(dis.getTime());                    dis_res.setNumber(_tmp + dis.getNumber());                    list_dres.add(dis_res);                    _tmp = 0;                }            }            if ((i + 1) == list_ds.size() && flag == true) {                dis_res.setTime(list_ds.get(list_ds.size() - 1).getTime());                dis_res.setNumber(_tmp                        + list_ds.get(list_ds.size() - 1).getNumber());                list_dres.add(dis_res);            }        }        return list_dres;    }}


[解决办法]
差不多也就这样了,一次遍历搞定,如果不太依赖于for的话,大概其可以少点判断和标志位。

不过其实建议直接靠数据库搞定:
Select timer, sum(num)
From xxoo
Order By timer
[解决办法]
你可以用个map来实现可能看起来清晰些
List<Disple> list_dres = new ArrayList<Disple>();
Map<Date, Disple> map = new HashMap<Date, Disple>();
for(Disple disple : list_dres) {
Disple temp = map.get(disple.getTime());
if(temp == null) {
map.put(disple.getTime(), disple));
} else {
temp.setNumber(temp.getNumber() + disple.getNumber());
}
}
//在把map转换为list


你们不允许用其他函数很奇怪啊,应该是不允许用数据库自身特有的函数吧,想T-SQL的函数很少有不允许用的吧

热点排行