一个小小的java算法练习
来源:互联网 发布:淘宝图片空间怎么整理 编辑:程序博客网 时间:2024/06/07 22:27
最近项目中有一个页面运行非常慢,原来是数据从数据库取出简单封装成对象后直接以JSON的方式丢给 javascript 处理,对象个数比较多,甚至导致了浏览器报脚本运行太慢的警告。其中有一块代码写的不好懂,处理的逻辑大意是:从数据库返回3列比如A, B, C,其中A列有重复值,那么以A列的值进行group, 列B和C的值做成key-value的对象,整个数据处理完后,形成一个可以放进 HTML5 中的 <optgroup> 标签中的数据结构。下面是初始的 javascript 代码:
var technologyData = data.turbinesVO.technology;var technologyList = new Array();var stageCodeArray = new Array();var lastFrameType = technologyData[0].frameTypeGrp;for(var i=0;i<technologyData.length;i++){if(technologyData[i].frameTypeGrp == lastFrameType){var tempStageCode = {"optionId" : lastFrameType+"/"+technologyData[i].stageCode,"optionSn" : lastFrameType+" - "+technologyData[i].stageCode};stageCodeArray.push(tempStageCode);}else{var tempFrameType = {"groupName" : lastFrameType,"optionList" : stageCodeArray};technologyList.push(tempFrameType);stageCodeArray = new Array();var tempStageCode = {"optionId" : technologyData[i].frameTypeGrp+"/"+technologyData[i].stageCode,"optionSn" : technologyData[i].frameTypeGrp+" - "+technologyData[i].stageCode};stageCodeArray.push(tempStageCode);}lastFrameType = technologyData[i].frameTypeGrp;}var tempFrameType = {"groupName" : lastFrameType,"optionList" : stageCodeArray};technologyList.push(tempFrameType);
这个算法是基于数据对象 technologyData 已经根据 frameTypeGrp 进行排序(在数据库已经排好序了)。
理解了这个算法后,经考虑形成了下面的java算法:
Map<String, Technology> unikTechs = new HashMap<String, Technology>();Technology technology = null;// turbinesVO.getTechnology() returns target data which being handledfor (TechnologyDTO tech : turbinesVO.getTechnology()) { // fameType is the column A, that becomes group key and will put into auxiliary collection unikTechs String fameType = tech.getFrameTypeGrp(); // check whether there is already a Technology with this given group key - "fameType" if (unikTechs.keySet().contains(fameType)){ technology = unikTechs.get(fameType); } else { // this means this group key is first time to come technology = new Technology(); technology.setGroupName(fameType); // associate to the final returned object "result" by result.getTechs() result.getTechs().add(technology); // update auxiliary collection for future examination unikTechs.put(fameType, technology); } // construct column B&C as key-value to an option for <optgroup> String stageCode = tech.getStageCode(); Pair pair = new Pair(); pair.setOptionId(fameType + "/" + stageCode); pair.setOptionSn(fameType + " - " + stageCode); // append this option to optionList under group key - "fameType" technology.getOptionList().add(pair);}
对应的辅助类:
public class Technology implements Comparable<Technology>{private String groupName;private List<Pair> optionList = new ArrayList<Pair>();@Overridepublic int compareTo(SiteTurbine o) {return this.groupName.compareTo(o.groupName);}public String getGroupName() {return groupName;}public void setGroupName(String groupName) {this.groupName = groupName;}public List<Pair> getOptionList() {return optionList;}public void setOptionList(List<Pair> optionList) {this.optionList = optionList;} }public class Pair{private String optionId;private String optionSn;public String getOptionId() {return optionId;}public void setOptionId(String optionId) {this.optionId = optionId;}public String getOptionSn() {return optionSn;}public void setOptionSn(String optionSn) {this.optionSn = optionSn;}}
经过修改后,算法更容易懂,而且数据对象可以是无序的(即没有按 fameType 进行字典排序),而且比较优雅。:)
- 一个小小的java算法练习
- 一个小小的java多线程
- 一份小小的练习
- 【C++】只为熟悉语言的一个小小练习
- java 写的一个关机小小程序
- 指针的指针小小练习
- 对kmp算法的一个小小的总结
- 一个小小的烦恼
- 一个小小的错误
- 一个小小的问题
- 一个小小的问题
- 一个小小的Slider~
- 一个小小的计算器
- 一个小小的dp
- 一个小小的进步~
- 一个小小的makefile
- 一个小小的案例
- 一个小小的项目
- 让步
- 栈的实现
- time 和datetime
- QQ 客服接口详解
- 冒泡算法
- 一个小小的java算法练习
- 线程的 休眠
- 选择算法
- WPF体系结构
- 模拟一个先进先出的队列
- 软件测试——一些想法
- 线程的“优先权”(priority)介绍
- HDU 4119 Isabella's Message(模拟)
- PDF文件存储结构