高性能的数据查找方式

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

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算法方式来替代循环查找的方式很大程度上将带来效率提升。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值