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. C++中有符号/无符号数比较

    原创文章,欢迎阅读,禁止转载. 在我的程序中有如下代码编译被警告了 if(list.size()>msize){...} warning C4018: '<' : signed/unsig ...

  2. JavaScript-location:封装当前窗口正在打开的url的对象

    location:封装当前窗口正在打开的url的对象 href:完整的url protocol:协议 host:主机名+端口 hostname:主机名 port:端口 pathname:路径 hash ...

  3. VPN帐号(每1小时自动断开及更新密码)

    免费的vpn帐号 http://freevpn.wwdhz.com/

  4. Reset CSS

    摘自<锋利的JQuery> 关于重置样式,可以参考Eric meyer的重置样式和YUI的重置样式 body,h1,h2,h3,h4,h5,h6,hr,p,blockquote,dl,dt ...

  5. 01、AngularJs简介

    AngularJs致力于减轻程序员在开发Ajax应用过程的痛苦.做前端的童鞋都知道,当在开发Ajax应用时,我们在与后台交互的同时,还在不断的手动操作Dom,诸如自己组装后台数据,渲染Html标签生成 ...

  6. 基于SpringMVC的增删改查

    废话不多说,直接开始步骤! 1.创建一个Dynamic Web Project 2.在WEB-INF包下的lib文件夹中引入相关jar commons-logging-.jar jstl.jar sp ...

  7. 测试RAC的功能

    1.查看RAC服务状态 node1-> crs_stat -t Name           Type           Target    State     Host ---------- ...

  8. sqlserver 读取xml 字符串方法

    declare @xml xml declare @propertyName varchar(50)  declare @str nvarchar(max)   set @propertyName = ...

  9. 360等杀掉了app的主进程后 ,如何自动开启 如何防止被kill

    如何阻止360等进程查杀工具停止App后台进程安全软件优化内存时需要关闭没用的进程既然你同意使用360,,也允许了360的最高权限..那么他就有足够的权限来杀掉app后台进程. 一 如何保证app进程 ...

  10. PHPBB公布新的维护版本

    9月28日,PHPBB官方网站公布了新PHPBB的最新消息.这个版本命名为:"Richard 'D¡cky' Foote",版本号为3.0.12.据官方的说明,“这个版本是一个维护 ...