日期:2014-05-20  浏览次数:20668 次

编程求解!
写一个ArrayList类的代理,其内部实现和ArrayList中完全形同的功能,并可以计算每个方法运行的时间

------解决方案--------------------
给你写了一个动态代理,自个看看把,有main方法。
Java code

package util;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.ArrayList;
import java.util.List;


public class ArrayListProxy implements InvocationHandler {
    List list = null;
    
    public ArrayListProxy(){
        this.list = new ArrayList();
    }
    
    public Object invoke(Object proxy, Method method, Object[] args)
            throws Throwable {
            long starttime = System.currentTimeMillis();
            Object o = method.invoke(list, args);
            System.out.println(method.getName()+"() 执行了"+(System.currentTimeMillis()-starttime));
            return o;
    }
    
    public static List getArrayList(){
        return (List)Proxy.newProxyInstance(ArrayList.class.getClassLoader(), new Class[]{List.class}, new ArrayListProxy());
    }

    public static void main(String[] args) {
        List list = getArrayList();
        for(int i = 10000; i < 20005; i ++){
            list.add(i);
        }
        list.size();
        List list2 = getArrayList();
        for(int i = 10006; i < 40021; i ++){
            list2.add(i);
        }
        list.contains(list);
        
    }
}