假设你有一个很大的数组,现在你想知道一个元素是不是在这个数组中,你会如何做呢?一种方法是使用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;同时顺序查找的时间很不稳定,如果查找对象集中在数组的后部,那么消耗的时间还要远远高于平均时间。