public class PerformanceTester {
public static final int TIMES=100000;

public static abstract class Tester{
private String operation;
public Tester(String operation){this.operation=operation;}
public abstract void test(List<String> list);
public String getOperation(){return operation;}
}

static Tester iteraTester=new Tester("iterate") {//执行迭代操作的匿名类

public void test(List<String> list) {
for(int i=0;i<10;i++){
Iterator<String> it=list.iterator();
while (it.hasNext()) {
it.next();

}

}

}

};
static Tester getTester=new Tester("get") {//执行随机访问操作的匿名类

public void test(List<String> list) {
for(int i=0;i<list.size();i++){
for(int j=0;j<10;j++ )
list.get(i);
}

}
};
static Tester insertTester=new Tester("insert") {//执行插入操作的匿名类
public void test(List<String> list) {
ListIterator<String> it=list.listIterator(list.size()/2);//从列表的中间开始
for(int i=0;i<TIMES/2;i++){
it.add("Hello");
}
}
};
static Tester removeTester=new Tester("remove") {//执行删除操作的匿名类

public void test(List<String> list) {
ListIterator<String> it=list.listIterator();
while(it.hasNext()){
it.next();
it.remove();
}

}
};
static public void testJavaArray(List<String> list){
Tester[] testers={iteraTester,getTester};
test(testers, list);
}
static public void testList(List<String> list){
Tester[] testers={insertTester,iteraTester,getTester,removeTester};
test(testers,list);
}
private static void test(Tester[] testers, List<String> list) {
for(int i=0;i<testers.length;i++){
System.out.print(testers[i].getOperation()+"操作: ");
long t1=System.currentTimeMillis();
testers[i].test(list);
long t2=System.currentTimeMillis();
System.out.print(t2-t1+" ms");
System.out.println();
}

}
public static void main(String[] args) {
List<String> list=null;

//测试Java数组
System.out.println("----测试Java数组----");
String[] ss=new String[TIMES];
Arrays.fill(ss, "Hello");
list=Arrays.asList(ss);
testJavaArray(list);
ss=new String[TIMES/2];

Collection<String> col=Arrays.asList(ss);

//测试Vector
System.out.println("----测试Vector----");
list=new Vector<String>();
list.addAll(col);
testList(list);

//测试LinkedList
System.out.println("----测试LinkedList----");
list=new LinkedList<String>();
list.addAll(col);
testList(list);

//测试ArrayList
System.out.println("----测试ArrayList----");
list=new ArrayList<String>();
list.addAll(col);
testList(list);

}

}

比较Java数组,ArrayList,LinkedList,Vector 性能比较的更多相关文章

  1. java 中 ArrayList LinkedList Vector 三者的异同点

    1.ArrayList和Vector都是基于数组实现的,所以查询速度很快,增加和删除(非最后一个节点)速度慢: Vector是线程安全的,ArrayList不是. 2.LinkedList 是一个双向 ...

  2. Java集合--ArrayList,LinkedList性能分析

    转载请注明出处:http://www.cnblogs.com/skywang12345/p/3308900.html 第1部分 List概括 先回顾一下List的框架图 (01) List 是一个接口 ...

  3. ArrayList LinkedList Vector

    ArrayList是基于数组实现的,没有容量的限制. 在删除元素的时候,并不会减少数组的容量大小,可以调用ArrayList的trimeToSize()来缩小数组的容量. ArrayList, Lin ...

  4. ArrayList, LinkedList, Vector - dudu:史上最详解

    ArrayList, LinkedList, Vector - dudu:史上最详解 我们来比较一下ArrayList, LinkedLIst和Vector它们之间的区别.BZ的JDK版本是1.7.0 ...

  5. java类集框架(ArrayList,LinkedList,Vector区别)

    主要分两个接口:collection和Map 主要分三类:集合(set).列表(List).映射(Map)1.集合:没有重复对象,没有特定排序方式2.列表:对象按索引位置排序,可以有重复对象3.映射: ...

  6. 详解Java中ArrayList、Vector、LinkedList三者的异同点(转)

    本文转自http://my.oschina.net/zzw922cn/blog/491631 一.ArrayList ArrayList是一个可以处理变长数组的类型,这里不局限于“数”组,ArrayL ...

  7. 详解Java中ArrayList、Vector、LinkedList三者的异同点

    转载:https://my.oschina.net/zzw922cn/blog/491631 一.ArrayList ArrayList是一个可以处理变长数组的类型,这里不局限于"数&quo ...

  8. ArrayList,LinkedList,Vector集合的认识

    最近在温习Java集合部分,花了三天时间读完了ArrayList与LinkedList以及Vector部分的源码.之前都是停留在简单使用ArrayList的API,读完源码看完不少文章后总算是对原理方 ...

  9. Java API —— ArrayList类 & Vector类 & LinkList类

    1.ArrayList类     1)ArrayList类概述         · 底层数据结构是数组,查询快,增删慢         · 线程不安全,效率高     2)ArrayList案例   ...

随机推荐

  1. juery与表单中name="nodeName"引起的冲突

    引入jquery时,表单中如果有name="nodeName"的表单项,会有一些奇怪的冲突. 表单HTML代码如下: <form id="formAddEquipN ...

  2. jackson json转list

    今天项目中用到了jackson,经理说效率高一些,所以就开始用起来,一开始json转对象,对象转json还是很简单的,但也还是有一些问题,后来加了一点配置属性就没有报错了 ObjectMapper m ...

  3. linux c++循环缓冲区模板类

    一:概述 实际学习和工作中,我们经常会遇到读写大量数据的情况,这个时候我们可能就用到了循环缓冲区. 循环缓冲区在处理大量数据的时候有很大的优点,循环缓冲区在一些竞争问题上提供了一种免锁的机制,免锁的前 ...

  4. VS2012中,C# 配置文件读取 + C#多个工程共享共有变量 + 整理using语句

    (一) C# 配置文件读取 C#工程可以自动生成配置文件,以便整个工程可以使用设置的配置进行后续的处理工作. 1. 首先,右键工程文件-->Properties -->settings-- ...

  5. 如何给澳洲路局写信refound罚金,遇到交通罚款怎么办

    在澳洲,100%的司机收到过罚单,包括停车,超速,闯红灯等等,其罚金一般都在200-500之间,当然其单位是AUD.所以,对大多数留学生来说,收到罚金意味着一个礼拜要吃吐了. 本人就收到过一次超速罚单 ...

  6. iOS开发零基础--Swift教程 可选类型

    可选类型的介绍 注意: 可选类型时swift中较难理解的一个知识点 暂时先了解,多利用Xcode的提示来使用 随着学习的深入,慢慢理解其中的原理和好处 概念: 在OC开发中,如果一个变量暂停不使用,可 ...

  7. 网页播放器(jsp、js)

    jsp对控件显示 <%@ page language="java" import="java.util.*" pageEncoding="UTF ...

  8. 关于Apache日志的统计

    统计apache日志文件里访问量前十的ip并按从多到少排列 五月 31, 2012 by FandLR   Filed under Linux Leave a comment 解法1: cat acc ...

  9. 如何遍历HashMap

    HashMap的遍历有两种常用的方法,那就是使用keyset及entryset来进行遍历,但两者的遍历速度是有差别的 java Map 遍历速度最优解 第一种: Map map = new HashM ...

  10. java中对List<Map<String,Object>>中的中文汉字排序

    import java.text.Collator;import java.util.ArrayList;import java.util.Collections;import java.util.C ...