关于效率

来源:互联网 发布:青海干部教育网络平台 编辑:程序博客网 时间:2024/05/16 20:05

一个场次安排,我花了两天把绕口令般的需求看懂,然后再花3天时间写出了我自认为还有点内容的代码。经理看过之后大为惊讶,因为我的代码频繁的访问数据库,而且冗余很大。这些我自己开始也发现了,可是我就是在逃避,而不是想办法优化。最后的结果是经理花了一下午时间重写了这个模块,我感到脸上像被扇了一个耳光。写代码不光要实现功能,也要想尽一切办法减少程序的开销。这是我学到的教训。

下面粘出经理的程序,只为了自己学习其中的思想和方法,更是为了记住这一教训。

public String savePlan(Ccap ccap) throws Exception {List<Csdw> csdwList = this.getDao().getList("from Csdw A where A.ssgl.kqzt=1");if(csdwList!=null && csdwList.size()>1){//案例背景List<Albj> albjList = this.getDao().getList("from Albj A where A.allx = 0 and A.alzt = 1");int alCount = albjList.size();if(alCount==0){return "当前无可分配的案例背景!";}//确定参赛队伍数量分配规则,完全分组、剩余一组、剩余两组、剩余三组int csdwCount = csdwList.size();int syCount = csdwCount%4;//创建对象抽取容器List<Integer> containt = new ArrayList<Integer>();for(int i=0;i<csdwCount;i++){containt.add(i);}//构建随机数Random random = new Random();//构建参赛队伍序列,分四组int arrLen = csdwCount/4;Csdw[] A1 = new Csdw[arrLen];//填充参赛队伍信息for(int i=0;i<A1.length;i++){int ranInt = random.nextInt(containt.size());A1[i] = csdwList.get(containt.get(ranInt));//抽取参赛队伍填充分组列表containt.remove(ranInt);//将已抽取队伍编号清除}Csdw[] A2 = new Csdw[arrLen];for(int i=0;i<A2.length;i++){int ranInt = random.nextInt(containt.size());A2[i] = csdwList.get(containt.get(ranInt));//抽取参赛队伍填充分组列表containt.remove(ranInt);//将已抽取队伍编号清除}Csdw[] B1 = new Csdw[arrLen];for(int i=0;i<B1.length;i++){int ranInt = random.nextInt(containt.size());B1[i] = csdwList.get(containt.get(ranInt));//抽取参赛队伍填充分组列表containt.remove(ranInt);//将已抽取队伍编号清除}Csdw[] B2 = new Csdw[arrLen];for(int i=0;i<B2.length;i++){int ranInt = random.nextInt(containt.size());B2[i] = csdwList.get(containt.get(ranInt));//抽取参赛队伍填充分组列表containt.remove(ranInt);//将已抽取队伍编号清除}//比赛时间SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date date=sdf.parse(ccap.getKssj());long startTime=date.getTime();long aStartTime=startTime;long bStartTime=startTime;//构建第一轮比赛场次信息for(int i=0;i<A1.length;i++){int ranAlbj = random.nextInt(alCount);aStartTime+=(ccap.getBssj()+ccap.getBsje())*60000;Date da=new Date(aStartTime);Ccap ap = new Ccap(A1[i].getSsgl(), albjList.get(ranAlbj), "1", "A", String.valueOf(i+1),A1[i].getCsdwid(), A1[i].getCsdwmc(), 0.0, A2[i].getCsdwid(),A2[i].getCsdwmc(), 0.0,sdf.format(da), ccap.getBsje(),ccap.getBssj());this.getDao().saveObj(ap);}for(int i=0;i<B1.length;i++){int ranAlbj = random.nextInt(alCount);bStartTime+=(ccap.getBssj()+ccap.getBsje())*60000;Date da=new Date(bStartTime);Ccap ap = new Ccap(B1[i].getSsgl(), albjList.get(ranAlbj), "1", "B", String.valueOf(i+1),B1[i].getCsdwid(), B1[i].getCsdwmc(), 0.0, B2[i].getCsdwid(),B2[i].getCsdwmc(), 0.0,sdf.format(da), ccap.getBsje(),ccap.getBssj());this.getDao().saveObj(ap);}if(syCount==1){//构建第二场场次信息//剩余一组队伍Csdw leav = csdwList.get(containt.get(0));//随即抽取A实验室A组一组信息int ranInt = random.nextInt(A1.length);int ranAlbj = random.nextInt(alCount);aStartTime+=(ccap.getBssj()+ccap.getBsje())*60000;Date da=new Date(aStartTime);Ccap ap = new Ccap(leav.getSsgl(), albjList.get(ranAlbj), "1", "A", String.valueOf(A1.length+1),leav.getCsdwid(), leav.getCsdwmc(), 0.0, A1[ranInt].getCsdwid(),A1[ranInt].getCsdwmc(), 0.0,sdf.format(da), ccap.getBsje(),ccap.getBssj());A1[ranInt]=leav;this.getDao().saveObj(ap);}else if(syCount==2){//构建第二场场次信息//剩余两组组队伍,先抽取一组放入A实验室,剩余的一组放入B实验室int ranInt = random.nextInt(containt.size());Csdw leav = csdwList.get(containt.get(ranInt));containt.remove(ranInt);//随即抽取A实验室A组一组信息ranInt = random.nextInt(A1.length);int ranAlbj = random.nextInt(alCount);aStartTime+=(ccap.getBssj()+ccap.getBsje())*60000;Date da=new Date(aStartTime);Ccap ap = new Ccap(leav.getSsgl(), albjList.get(ranAlbj), "1", "A", String.valueOf(A1.length+1),leav.getCsdwid(), leav.getCsdwmc(), 0.0, A1[ranInt].getCsdwid(),A1[ranInt].getCsdwmc(), 0.0,sdf.format(da), ccap.getBsje(),ccap.getBssj());A1[ranInt]=leav;this.getDao().saveObj(ap);//最后一组Csdw last = csdwList.get(containt.get(0));ranInt = random.nextInt(B1.length);ranAlbj = random.nextInt(alCount);bStartTime+=(ccap.getBssj()+ccap.getBsje())*60000;da=new Date(bStartTime);Ccap apb = new Ccap(leav.getSsgl(), albjList.get(ranAlbj), "1", "B", String.valueOf(B1.length+1),last.getCsdwid(), last.getCsdwmc(), 0.0, B1[ranInt].getCsdwid(),B1[ranInt].getCsdwmc(), 0.0,sdf.format(da), ccap.getBsje(),ccap.getBssj());B1[ranInt]=last;this.getDao().saveObj(apb);}else if(syCount==3){//构建第二场场次信息//剩余三组组队伍,先抽取一组放入A实验室,再抽取一组放入B实验室,剩余的一组放入A实验室int ranInt = random.nextInt(containt.size());Csdw leav = csdwList.get(containt.get(ranInt));containt.remove(ranInt);//随即抽取A实验室A组一组信息ranInt = random.nextInt(A1.length);int ranAlbj = random.nextInt(alCount);aStartTime+=(ccap.getBssj()+ccap.getBsje())*60000;Date da=new Date(aStartTime);Ccap ap = new Ccap(leav.getSsgl(), albjList.get(ranAlbj), "1", "A", String.valueOf(A1.length+1),leav.getCsdwid(), leav.getCsdwmc(), 0.0, A1[ranInt].getCsdwid(),A1[ranInt].getCsdwmc(), 0.0,sdf.format(da), ccap.getBsje(),ccap.getBssj());A1[ranInt]=leav;this.getDao().saveObj(ap);//第二组ranInt = random.nextInt(containt.size());Csdw second = csdwList.get(containt.get(0));ranInt = random.nextInt(B1.length);ranAlbj = random.nextInt(alCount);bStartTime+=(ccap.getBssj()+ccap.getBsje())*60000;da=new Date(bStartTime);Ccap apb = new Ccap(leav.getSsgl(), albjList.get(ranAlbj), "1", "B", String.valueOf(B1.length+1),second.getCsdwid(), second.getCsdwmc(), 0.0, B1[ranInt].getCsdwid(),B1[ranInt].getCsdwmc(), 0.0,sdf.format(da), ccap.getBsje(),ccap.getBssj());B1[ranInt]=second;this.getDao().saveObj(apb);//最后一组Csdw last = csdwList.get(containt.get(0));ranInt = random.nextInt(A2.length);ranAlbj = random.nextInt(alCount);aStartTime+=(ccap.getBssj()+ccap.getBsje())*60000;da=new Date(aStartTime);Ccap apa = new Ccap(leav.getSsgl(), albjList.get(ranAlbj), "1", "A", String.valueOf(A1.length+2),last.getCsdwid(), last.getCsdwmc(), 0.0, A2[ranInt].getCsdwid(),A2[ranInt].getCsdwmc(), 0.0,sdf.format(da), ccap.getBsje(),ccap.getBssj());A2[ranInt]=last;this.getDao().saveObj(apa);}//构建第二轮场次信息for(int i=0;i<A1.length;i++){int ranAlbj = random.nextInt(alCount);aStartTime+=(ccap.getBssj()+ccap.getBsje())*60000;Date da=new Date(aStartTime);Ccap ap = new Ccap(A1[i].getSsgl(), albjList.get(ranAlbj), "2", "A", String.valueOf(i+1),B2[i].getCsdwid(), B2[i].getCsdwmc(), 0.0, A1[i].getCsdwid(),A1[i].getCsdwmc(), 0.0,sdf.format(da), ccap.getBsje(),ccap.getBssj());this.getDao().saveObj(ap);}for(int i=0;i<B1.length;i++){int ranAlbj = random.nextInt(alCount);bStartTime+=(ccap.getBssj()+ccap.getBsje())*60000;Date da=new Date(bStartTime);Ccap ap = new Ccap(B1[i].getSsgl(), albjList.get(ranAlbj), "2", "B", String.valueOf(i+1),A2[i].getCsdwid(), A2[i].getCsdwmc(), 0.0, B1[i].getCsdwid(),B1[i].getCsdwmc(), 0.0,sdf.format(da), ccap.getBsje(),ccap.getBssj());this.getDao().saveObj(ap);}return "安排成功!";}else{return "参赛队伍不足,无法进行场次安排!";}}


 

原创粉丝点击