2012年2月3日星期五

Java中查找数组中的某个元素

假设你有一个很大的数组,现在你想知道一个元素是不是在这个数组中,你会如何做呢?一种方法是使用for循环,一个一个从数组中找,这是最直接也是最笨的方法。因为你不可避免地要一个一个去数那些无用的元素。比较好一点的方法是使用Arrays类的binarySearch方法。废话不说,直接上代码。
import java.util.*;
class Test{
    public static void main(String[] args){
        int[] a = new int[10000000];
        for(int j=0;j<10000000;j++){
           a[j]=j;
       }
    
      long start = Calendar.getInstance().getTimeInMillis();
     for (int j =0; j<10000000; j++){
         if (a[j] == a.length-1) 
       break;
     }
     long end = Calendar.getInstance().getTimeInMillis();
     System.out.println(end-start);
     long start1 = Calendar.getInstance().getTimeInMillis();
    
    int t =Arrays.binarySearch(a,0,a.length,a.length-1);
    long end1 = Calendar.getInstance().getTimeInMillis();
    System.out.println(end1-start1);
    
   }
}
在我的机器上顺序查找消耗的时间是18ms,binarySearch的时间是0。不难看出,顺序查找的平均消耗时间要远远高于binarySeach;同时顺序查找的时间很不稳定,如果查找对象集中在数组的后部,那么消耗的时间还要远远高于平均时间。

2012年1月6日星期五

推广一下华为的Dbank

还是有一些有用的资源的,可以用rss订阅。http://bbs.dbank.com/?fromuid=706679