用代理测试ArrayList和LinkedList的添加和删除元素所用的时间

来源:互联网 发布:java的equals方法 编辑:程序博客网 时间:2024/06/06 15:02
package csdn.a.b;


import java.io.FileInputStream;
import java.io.InputStream;
/*
 * 需求:用代理测试ArrayList和LinkedList的添加和删除元素所用的时间。


        思路:写一个目标类,定义添加元素和删除元素两个方法,建立配置文件,
                       配置ArrayList和linkedList,在目标类中获取配置文件中信息。
           再定义代理类代理目标类,测试两个方法的运行时间。


 * */
import java.util.List;
import java.util.Properties;
import java.util.Random;
public class TargetDemo {
//List array=new ArrayList();
public static void main(String[] args)throws Exception{
InputStream is=new FileInputStream("config.properties");//读取配置文件,便于两个集合的切换
Properties prop=new Properties();
prop.load(is);
List list=(List)Class.forName(prop.getProperty("name")).newInstance();//根据配置文件建立集合
List reList=add(list);
System.out.println(reList.size());
remove(list);
}

public static List add(List list)//将添加元素封装成一个方法
{
for(int x=1;x<100001;x++)//为了使效果明显,添加足够多的元素
{
list.add("abhu"+x);
}
System.out.println("add个数"+list.size());
return list;
}
public static void  remove(List list)//将删除元素封装成一个方法
{
for(int x=1;x<10001;x++)//为了使效果明显删除足够多的元素
{
list.remove(new Random().nextInt(10)+1);
}
System.out.println("remove个数"+list.size());
}

}

--------------------------------------------------------------------------------------------------------------------


package csdn.a.b;


import java.io.FileInputStream;
import java.io.InputStream;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.List;
import java.util.Properties;


public class ProxyClass {


/**
* @param args
*/
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
InputStream is=new FileInputStream("config.properties");//读取配置文件
Properties prop=new Properties();
prop.load(is);
Class interClass=Class.forName(prop.getProperty("interName"));//获取接口的字节码
final List list=(List)Class.forName(prop.getProperty("name")).newInstance();
Object proxy=Proxy.newProxyInstance(
interClass.getClassLoader(), 
new Class[]{interClass}, 
new InvocationHandler() {
TargetDemo target=new TargetDemo();//建立目标对象
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
// TODO Auto-generated method stub
long startTime=System.currentTimeMillis()*1000;
target.add(list);
long endTime=System.currentTimeMillis()*1000;
System.out.println("add"+(endTime-startTime));//测试目标对象add方法执行所用的时间

long startTime1=System.currentTimeMillis()*1000;
target.remove(list);
long endTime1=System.currentTimeMillis()*1000;
System.out.println("remove"+(endTime1-startTime1));//测试目标对象remove方法执行所用的时间
return method.invoke(target, args);
}
});//创建代理对象
proxy.toString();
}


}

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

结果是

1、

java.util.ArrayList
add个数100000
add方法所用的时间是47毫秒
remove个数90000
remove方法所用的时间是766毫秒

2、

java.util.LinkedList
add个数100000
add方法所用的时间是78毫秒
remove个数90000
remove方法所用的时间是16毫秒

总结:ArrayList集合的add方法效率要比LinkedList效率高

LinkedList集合的remove方法要比ArrayList效率高


0 0
原创粉丝点击