对于之前写的一篇文章现在想想存在不足之处,之前写的测试ArrayList和LinkedList的各项操作性能比较的程序没有体现面向对象的封装特性,所以,今天把代码重新写了一遍,其实改动的地方也很少,只是在文件中添加了一个抽象类。
之前的那篇文章如下:http://blog.csdn.net/dlutbrucezhang/article/details/9931025
现在思考一个问题,我想对两个相似的东西执行相同的操作来测试它们的性能好坏,如对ArrayList和LinkedList集合类测试它们的添加数据和删除数据的性能,怎么做比较好呢?现在需要考虑一个问题,是不是只是这样就行了,也就是只是测试这两项而不做其他,显然这种可能性不大,因为,我们在将来有可能会继续测试这两个集合类的更新和查询数据的性能,如果这时去修改已经写好的测试类,那么就会破坏代码的封装性,所以,在写测试代码之前就需要做些工作。
这里,我写一个抽象类,当然,你也可以用接口代替,它们很相似。然后用测试类去继承那个抽象类,并实现其中的方法(也就是测试接口),这样,以后我想再测试其他的不同,只需要在抽象类中添加相应的抽象方法即可,这样是不是比以前写的好多了呢!
下面给出重新写的测试代码
1.抽象类
public abstract class TestFunc { public static final int count = 80000; public abstract void add_value(); public abstract void delete_value(); public abstract void update_value(); public abstract void select_value(); }
2.ArrayList集合的测试类
import java.util.ArrayList; public class ArrayListTest extends TestFunc{ private ArrayList<Integer> my_array = new ArrayList<Integer>(); @Override public void add_value() { // TODO Auto-generated method stub long begin = System.currentTimeMillis(); for(int i = 0; i < count; i++){ my_array.add(i); } long over = System.currentTimeMillis(); System.out.println(" 操作 " + "ArrayList.add()方法需要的时间是:" + (over - begin) + " 毫秒 "); } @Override public void delete_value() { // TODO Auto-generated method stub long begin = System.currentTimeMillis(); for(int i = 0; i < my_array.size(); i++){ my_array.remove(i); } long over = System.currentTimeMillis(); System.out.println(" 操作 " + "ArrayList.remove()方法需要的时间是:" + (over - begin) + " 毫秒 "); } @Override public void update_value() { // TODO Auto-generated method stub long begin = System.currentTimeMillis(); for(int i = 0; i < my_array.size(); i++){ my_array.set(i, i - 1); } long over = System.currentTimeMillis(); System.out.println(" 操作 " + "ArrayList.set()方法需要的时间是:" + (over - begin) + " 毫秒 "); } @Override public void select_value() { // TODO Auto-generated method stub long begin = System.currentTimeMillis(); for(int i = 0; i < my_array.size(); i++){ my_array.get(i); } long over = System.currentTimeMillis(); System.out.println(" 操作 " + "ArrayList.get()方法需要的时间是:" + (over - begin) + " 毫秒 "); } }
3.LinkedList的测试类
import java.util.LinkedList; public class LinkedListTest extends TestFunc{ private LinkedList<Integer> my_link = new LinkedList<Integer>(); @Override public void add_value() { // TODO Auto-generated method stub long begin = System.currentTimeMillis(); for(int i = 0; i < count; i++){ my_link.add(i); } long over = System.currentTimeMillis(); System.out.println(" 操作 " + "LinkedList.add()方法需要的时间是:" + (over - begin) + " 毫秒 "); } @Override public void delete_value() { // TODO Auto-generated method stub long begin = System.currentTimeMillis(); for(int i = 0; i < my_link.size(); i++){ my_link.remove(i); } long over = System.currentTimeMillis(); System.out.println(" 操作 " + "LinkedList.remove()方法需要的时间是:" + (over - begin) + " 毫秒 "); } @Override public void update_value() { // TODO Auto-generated method stub long begin = System.currentTimeMillis(); for(int i = 0; i < my_link.size(); i++){ my_link.set(i, i+1); } long over = System.currentTimeMillis(); System.out.println(" 操作 " + "LinkedList.set()方法需要的时间是:" + (over - begin) + " 毫秒 "); } @Override public void select_value() { // TODO Auto-generated method stub long begin = System.currentTimeMillis(); for(int i = 0; i < my_link.size(); i++){ my_link.get(i); } long over = System.currentTimeMillis(); System.out.println(" 操作 " + "LinkedList.get()方法需要的时间是:" + (over - begin) + " 毫秒 "); } }
4.主测试程序
public class Main_Test { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub arrayTest(); linkedTest(); } private static void arrayTest(){ System.out.println("----------------现在开始测试ArrayList的各项操作----------------"); ArrayListTest aTest = new ArrayListTest(); aTest.add_value(); aTest.update_value(); aTest.select_value(); aTest.delete_value(); } private static void linkedTest(){ System.out.println("----------------现在开始测试LinkedList的各项操作----------------"); LinkedListTest lTest = new LinkedListTest(); lTest.add_value(); lTest.update_value(); lTest.select_value(); lTest.delete_value(); } }
结果都是一样的,在这里就不贴了。