对于之前写的一篇文章现在想想存在不足之处,之前写的测试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>();@Overridepublic void add_value() {// TODO Auto-generated method stublong 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) + " 毫秒 ");}@Overridepublic void delete_value() {// TODO Auto-generated method stublong 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) + " 毫秒 ");}@Overridepublic void update_value() {// TODO Auto-generated method stublong 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) + " 毫秒 ");}@Overridepublic void select_value() {// TODO Auto-generated method stublong 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>();@Overridepublic void add_value() {// TODO Auto-generated method stublong 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) + " 毫秒 ");}@Overridepublic void delete_value() {// TODO Auto-generated method stublong 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) + " 毫秒 ");}@Overridepublic void update_value() {// TODO Auto-generated method stublong 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) + " 毫秒 ");}@Overridepublic void select_value() {// TODO Auto-generated method stublong 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 stubarrayTest();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. 【小题目】写JAVA程序时可以创建一个名为123.java的源文件吗

    在写JAVA程序时创建名为123.java的源文件,前提是该源文件中没有public修饰的类,因为一旦使用public修饰后类名必须与文件名相同,而类名为标识符,不能以数字开头.因此,在没有用publ ...

  2. 控制台编写JAVA程序教程_写一个java程序的步骤是什么?写java程序技巧

    写Java程序是要按照步骤来的,这样才能写好一个java程序,那么接下来,我们就来给大家讲解一下写一个java程序的步骤是什么? (1)创建Java项目:"FileàNewàProjectà ...

  3. 如何用记事本写Java程序

    用记事本写Java程序 事先准备: 安装并配置好Java运行环境(JDK) 确认你的电脑中有记事本 确认电脑中的命令行窗口可以正常使用 ​ 开始: 首先,打开记事本,输入你要写的程序,例如: clas ...

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

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

  5. 使用记事本写java程序并编译运行过程

    写一个简单的java源文件:HelloWorld.java public class HelloWorld{public static void main(String[] args){System. ...

  6. pat上写java程序_如何运行Java程序和设置CLASSPAT

    导读: 如何运行JAVA和CLASSPATH环境变量的设置是学习和使用JAVA中最基本的问题,本不应在此赘述.但近来不少人在论坛上提出的问题却与此有关,我平时碰到的一些初学者也往往在这个问题上卡了壳, ...

  7. 用虚拟机写java程序_JAVA是什么?java是狗屁!写java程序说穿了就是在对java虚拟机这个软件进行应用。...

    倒······· 支持,接分 还要提醒一下,楼主表太刺激那只JCreators,它是玩轮子的 来接分 支持 另外说一下,JCreators是什么 是个自动生成java代码的对jvm这个软件进行辅助应用 ...

  8. 如何在IDEA中写Java程序

    用IDEA写JAVA File–>new–>Project 然后选择Empty Project(为方便以后管理所以选择一个空的Project) next–>给文件夹命名,然后选择存放 ...

  9. 【XML和Java】手写Java程序引用xsd验证xml

    一.首先要有一个xml文件和xsd文件 (1) database.conf.xml <?xml version="1.0" encoding="UTF-8" ...

最新文章

  1. 大量数据转移_大量数据
  2. Malformed server response 解决方案
  3. invalidate () 方法
  4. pymysql dataframe 写入sql
  5. rmd转换html怎么换页,如何在由RStudiomarkdown生成的单词文档中添加分页符
  6. XML Parsing in a Producer-Consumer Model
  7. 大学毕业就进入SAP,我获得了哪些收益
  8. 数学--数论--莫比乌斯反演
  9. 28家知名IT公司名称的由来
  10. iOS开发-UIScrollView原理
  11. Linux 中的各种栈:进程栈 线程栈 内核栈 中断栈
  12. 为什么不可以使用哈曼顿距离_哈曼卡顿SOUNDSTICKS4全新一代无线水晶蓝牙音箱评测...
  13. Java监控MongoDB空间使用量、连接数
  14. Mac上编译Android8.0+
  15. linux ext2 文件系统学习
  16. android realm jar包,android-Realm支持maven或拥有jar的最新资源
  17. F1C100S自制开发板调试过程
  18. java导出excel文件,设置单个单元格内字段不同样式
  19. Spring Boot 3.0.0-M1 Reference Documentation(Spring Boot中文参考文档)-附录A-C
  20. win7关闭系统索引服务器,如何关闭Windows7系统中的索引功能

热门文章

  1. ie6下js更新元素display:block后,仍然不显示的hack办法
  2. Hibernate关联关系映射实例速查
  3. Spring(1)_Bean初始化_逻辑图
  4. Django Rest Framework之用户频率/访问次数限制
  5. 再谈 iptables 防火墙的 指令配置
  6. ubuntu重启+sublime快捷键
  7. 浅析机器视觉在安防行业的应用
  8. VMware Esxi5.1.0开启ssh服务的方法
  9. 开发高性能并发应用不是一件容易的事情。这类应用的例子包括高性能Web服务器、游戏服务器和搜索引擎爬虫...
  10. [杭电ACM]3336Count the string