`
shawnccx
  • 浏览: 165692 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

高性能的数据查找方式

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

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              500000
HASH算法方式       1*N       1000      500                 500
通过以上表格的数据分析可知:采用HASH算法方式来替代循环查找的方式很大程度上将带来效率提升。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics