对于之前写的一篇文章现在想想存在不足之处,之前写的测试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. c 指针兼容性问题

    指针兼容性问题: const指针不能赋值给非const指针. 非const指针可以赋值给const 指针,但前提是只是一层间接运算 Example: int *pt1; const *pt2; con ...

  2. Entity Framework(序)

    ADO.NET Entity Framework 是一个对象-关系的映射结构,它提供了ADO.NET的一个抽象,可基于引用的数据库获取对象模型.可以通过Entity Framework 使用不同的变成 ...

  3. SOLVED: GATT callback fails to register

    I finally figured this problem out. The device I am using is a Samsung Galaxy S4 and the actual prob ...

  4. Windows Media Player安装了却不能播放网页上的视频

    前段时间遇到Windows Media Player安装了却不能播放网页上的视频的问题,在网上查找资料时,发现大部分资料都没能解决我这个问题.偶尔试了网上一牛人的方法,后来竟然解决了.现在再找那个网页 ...

  5. VBS基础篇 - class

    Class 语句:声明一个类的名称,以及组成该类的变量.属性和方法的定义. Class name '参数name必选项,Class 的名称 statements '一个或多个语句,定义了 Class ...

  6. oracle里如何将两个日期的时间差返回**时**分的格式

    SELECT EXTRACT(DAY FROM (sysdate-to_date('2012-03-29 00:00:00','YYYY-MM-DD HH24:MI:ss')) DAY TO SECO ...

  7. Javascript数据类型之Undefined和null

    Javascrip中的数据类型分为原始数据类型(primitive type)和对象数据类型(object type). 原始数据类型 原始数据类型包括:数字.字符串.布尔值.null.undefin ...

  8. 解决方法:java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;

    hibernate4.3版本 报错: 把实体注解的声明方式修改一下解决,如: 将 @Entity@Table(name=”table_name”)改为@Entity(name=”table_name” ...

  9. 无root权限安装python

    http://lujialong.com/?p=150 pipe 安装第三方包 http://www.lfd.uci.edu/~gohlke/pythonlibs/#pip http://www.cn ...

  10. 清除目录下的SVN信息

    今天需要迁移一个版本库中的子目录到新的版本库中,以为不需要保留日志信息,所以只需拿最新的代码提交就可以. 对于清除目录下的SVN信息,在网上找一些方法,并实践执行了下: 在linux下 删除这些目录是 ...