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. ASP.NET Core 1.0 入门——了解一个空项目

    var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...

  2. (转)CentOs上配置samba服务

    前 言 在我们使用 Windows 作为客户机的时候,通常有文件.打印共享的需求.作为Windows 网络功能之一,通常可以在 Windows 客户机之间通过 Windows Network 固有的功 ...

  3. Log4j 与 Logback的ConversionPattern对比

    为了能将log4j的配置无缝转到logback,需要了解其中ConversionPattern的差异,以下是对比表格,内容来自: log4j官网 logback官网 其中可能需要转换的地方主要有两块: ...

  4. berkeley db 内存池分配机制

    __memp_alloc() 注: MPOOL_ALLOC_SEARCH_DYN 没有 出现在 bdb document上, 也没出现在 除了mp_alloc外的代码里. 先删了 以便代码清楚. 按 ...

  5. UIAlertController的使用

    在iOS8中,苹果对UIAlertView和UIActionSheet进行了重新的封装,成为适应性更强,灵活性更高的UIAlertController.具体使用方法如下. UIAlertControl ...

  6. arduino 入手

    新买了个ardhuino 入门套件 1. Win7 Driver issue: Need to install the below drivers, because my windows is ins ...

  7. 7.添加基于Spring的WebService拦截器

    客户端拦截器: public class AccountInterceptor extends AbstractPhaseInterceptor<SoapMessage>{ private ...

  8. 【C-分支结构】

    一.关系运算符 双目运算符 自左向右结合 关系运算符的优先级低于算术运算符,高于赋值运算符 <(小于) <=(小于或等于) >(大于) >=(大于或等于) ==(等于) !=( ...

  9. Paypal支付接口

    先吐槽一下,国外的创业环境真的远远好于国内的创业环境. vps便宜,网络质量好,没有各种政策监管,各种便捷的金融工具.这其中就包括paypal. Paypal 支持两种付款方式,信用卡+paypal注 ...

  10. unity渲染层级关系小结(转存)

    最近连续遇到了几个绘制图像之间相互遮挡关系不正确的问题,网上查找的信息比较凌乱,所以这里就把自己解决问题中总结的经验记录下来. Unity中的渲染顺序自上而下大致分为三层. 最高层为Camera层,可 ...