高效判断数组中是否含有某个值



http://www.cnblogs.com/chenpi/p/5484887.html#_label2

从测试结果可以看出,使用简单的循环语句比使用任何集合都高效,很大一部分开发人员选择使用第一种方法(List),但这种方法其实是相对低效的。在使用集合提供的API前,需要把一个数组放到集合里,这需要消耗一定的时间,特别是对于Set集合;(注:其实ArrayList集合的性能跟普通的循环语句差不多,因为对于ArrayList,转换成集合的时候,仅仅是改变了内部的数组索引,遍历判断的时候,跟普通的循环语句类似);

如果要使用Arrays.binarySearch()方法,前提是数组要有序,在这个测试demo中,很显然数组是无序的,因此不该被使用;

事实上,如果你确实需要高效的去检查数组或集合中是否包含某个值,一个有序列表或者有序树能把时间复杂度降低到O(log(n)),或者使用散列集合,时间复杂度为O(1);

http://www.cnblogs.com/james1207/p/3278049.html

散列集合:

哈希集合: HashSet

哈希集合特点:存取顺序不确定,同一个哈希值的位置可以存放多个元素,
                  哈希集合存放元素的时候是先判断哈希地址值:hashCode()是否相同,如果不同则直接存放;
                  如果哈希地址值相同则再调用equals()方法对元素进行判断如果元素不同则存放,如果元素相同则不存放.

                  对于判断元素是否存在依赖的是hashCode()和equals()方法

    区别:ArrayList区别元素的方法只依赖于equals();
          HashSet  区别元素的方法依赖于hashCode()和equals();

 Iterator it = ha.iterator();//迭代器是哈希集合唯一的遍历方式
        while(it.hasNext())
        {
            Person p=(Person)it.next();
            sop(p.getName()+":"+p.getAge());//只有Person类中才有gerName()方法,所以必须把it.next()强制转换成Person对象
        }   

策略

http://www.cnblogs.com/baiqiantao/p/5449157.html



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值