高性能的数据查找方式

来源:互联网 发布:mac如何收藏网页 编辑:程序博客网 时间:2024/05/17 03:42

错误案例

当我们需要从一些会员中查找指定的会员,并且根据这个会员的属性做些操作。或者类似的数据筛选情况下。例如:

List<Person> results = searchResultList();//此时查询出的结果是1000,并且每个对象比较大String [] names = {"gary","lily","frank","red"}for(int j=0;j< names.length;j++){  String name= names [j];  for(int i=0;i< results.size(); i++){     Person person = results.get(i);     if(StringUtil.equals(person.name, name)){       //do somthing     }  }}

错误分析

查询条件的不确定性导致查询的结果可能很大,数量很多,如果再用嵌套式的循环,很可能产生性能的浪费,甚至导致内存的泄漏。

正确用法

//此时查询出的结果是1000,并且每个对象比较大List<Person> results = searchResultList();HashMap hp = HashMap();for(int i = 0; i < results.size(); i++){     Person person = results.get(i);     hp.put(person.name, person);}String [] names = {"gary", "lily", "frank", "red"}for(int i=0; i< names.length; i++){  String name = names [i];     if(hp.containsKey(name)){       //do somthing     }}         最差效率Results集合Names集合找到目标对象的循环次数双循环              N*N      1000     500             500000HASH算法方式      1*N      1000     500                500通过以上表格的数据分析可知:采用HASH算法方式来替代循环查找的方式很大程度上将带来效率提升。

测试关注点

用边界法进行测试,并且用JPROFILE对不确定的情况,观察内存的占用情况。


原创粉丝点击