对于之前写的一篇文章现在想想存在不足之处,之前写的测试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();
} }


      结果都是一样的,在这里就不贴了。

写Java程序要体现面向对象的更多相关文章

  1. 【转】介绍Jython,第一部分:轻轻松松写JAVA程序

    本文转自:http://www.ibm.com/developerworks/cn/education/java/j-jython1/index.html 关于本教程 本教程介绍哪些内容? 这个两部分 ...

  2. AJPFX浅谈关于Java程序员缺乏面向对象的基本功的问题

    为什么很多 Java 程序员会缺乏面向对象基本功?这得怪那些 Java 框架.现在 Java 的各种框架太发达.太傻瓜化了,导致很多程序员只需要按部就班.照着框架进行代码填空,基本已经丧失了 OOA ...

  3. 记事本写JAVA程序

    编写程序源码: 1.新建记事本程序,修改文件名称为HelloWorld.java 打开编辑以下内容,保存. public class HelloWorld { public static void m ...

  4. 使用100%面向过程的思维方式来写java程序

    1.java是强制写class关键字的语言,不能有独立的函数游离在类外出现在文件中,这和python c++ 都不同,后面的都可以单独在类外写函数,所以java被称为是纯面向对象的语言,py和c++都 ...

  5. 写Java程序的三十个基本规则【新手必读】

    (1) 类名首字母应该大写.字段.方法以及对象(句柄)的首字母应小写.对于所有标识符,其中包含的所有单词都应紧靠在一起,而且大写中间单词的首字母.例如:  ThisIsAClassName  this ...

  6. 笔记:写Java程序,并输出

    建一个文件名为 demo.java的文件 //写框架文件 public class Demo{ //写入口文件 public static void main(String[] args){ Syst ...

  7. 写Java程序让Jvm崩溃

    package jvm; public class HeapCrash { public static void main(String[] args) { //Object[] o = {“abc” ...

  8. 代写java程序qq:928900200

    学校为全面提升学校教学质量,提高管理水平,决定开发一套小型成绩管理系统,实现以下功能.1)   系统用户分为管理员.教师和学生三种角色,每种角色都可以包含若干个用户.其中管理员登录后可以进行教师.学生 ...

  9. Java程序员应当知道的10个面向对象设计原则

    面向对象设计原则是OOPS编程的核心, 但我见过的大多数Java程序员热心于像Singleton (单例) . Decorator(装饰器).Observer(观察者) 等设计模式,而没有把足够多的注 ...

随机推荐

  1. 【iis错误码】IIS 服务 这些年遇到的错误码

      II 发生错误,客户端似乎有问题.例如,客户端请求不存在的页面,客户端未提供有效的身份验证信息. 400 - 错误的请求. 401 - 访问被拒绝.   -- 暴力添加everyone用户,  i ...

  2. matlab实现雅可比、高斯塞德尔、后项误差计算

    稀疏矩阵生成: function [a, b] = aparsesetup(n) e = ones(n, 1); n2 = n / 2; a = spdiags([-e 3*e -e], -1:1, ...

  3. API网关

    API网关 最开始只是想找个API网关防止API被恶意请求,找了一圈发现基于Nginx的OpenResty(Lua语言)扩展模块Orange挺好(也找了Kong,但是感觉复杂了点没用),还偷懒用Vag ...

  4. Week2 Team Homework: 必应输入法的软件分析和用户需求调查

    一.选题和目标人群的确定 4月8日,微软宣布推出首款整合搜索的中文云输入法“必应Bing输入法”,其前身是“英库拼音输入法”.微软宣称,该输入法界面干净,无广告.无插件,即使是在性能相对不高的电脑上, ...

  5. WPF 多线程处理(4)

    WPF 多线程处理(1) WPF 多线程处理(2) WPF 多线程处理(3) WPF 多线程处理(4) WPF 多线程处理(5) WPF 多线程处理(6) 开始一个线程处理读取的文件并且更新到list ...

  6. C#WinForm中在dataGridView中添加中文表头

    第一步: 注意事项:(1)如果使用数据库,那么第三步的名称可以是任意的,但是不能和数据库中的列名一样,否则会报错:    (2)第四步的页眉文本就是你想用的中文列名,自己定: (3)第六步尤其重要,不 ...

  7. 【Unity--Apwork框架】AOP编程--拦截,用于缓存和异常处理(Unity框架的拦截注入-Interception)

    第一步:定义拦截行为:CachingBehavior 和 ExceptionLoggingBehavior 他们都继承接口:IInterceptionBehavior (程序集 Microsoft.P ...

  8. spring mvc 经典总结

    概述 继 Spring 2.0 对 Spring MVC 进行重大升级后,Spring 2.5 又为 Spring MVC 引入了注解驱动功能.现在你无须让 Controller 继承任何接口,无需在 ...

  9. 1. what is Lua?

    glue language Lua is a proven, robust language, small.

  10. POJ2965The Pilots Brothers' refrigerator

    http://poj.org/problem?id=2965 这个题的话,一开始也不会做,旁边的人说用BFS,后来去网上看了众大神的思路,瞬间觉得用BFS挺简单易:因为要让一个“+”变为“-”,只要将 ...