使用二分查找算法在数组查找随机生成的key对应的值

来源:互联网 发布:项目开发计划软件 编辑:程序博客网 时间:2024/05/01 11:33

在《java核心技术》的“代理”一节中的一个示例,这个代理有点难理解,主要在工作中遇到的少,反正我是没写过,所以下面的代码是从书上抄的,而且这么难懂的逻辑也是醉了。。。


import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;import java.util.Arrays;import java.util.Random;public class ProxyTest {public static void main(String[] arge){Object[] elements = new Object[1000];//将1至1000的代理放到数组中去for(int i=0; i<elements.length; i++){Integer value = i+1;InvocationHandler handler = new TraceHandler(value);Object proxy = Proxy.newProxyInstance(null, new Class[]{Comparable.class}, handler);elements[i] = proxy;}Integer key = new Random().nextInt(elements.length)+1;//通过调用compareTo()进行二分查找int result = Arrays.binarySearch(elements, key);if(result>=0)System.out.println(elements[result]);}}class TraceHandler implements InvocationHandler{private Object target;//需要调用的对象public TraceHandler(Object t){target = t;}@Overridepublic Object invoke(Object proxy, Method m, Object[] arg2)throws Throwable {//先打印出方法名System.out.print(target);System.out.print("."+m.getName()+"(");//打印出参数if(arg2 != null){for(int i=0;i<arg2.length; i++){System.out.print(arg2[i]);if(i<arg2.length-1)System.out.print(", ");}}System.out.println(")");//开始调用return m.invoke(target, arg2);}}


0 0
原创粉丝点击