zoukankan      html  css  js  c++  java
  • Java数组和各种List的性能比较

    以下程序分别对Java数组、ArrayList、LinkedList和Vector进行随机访问和迭代等操作,并比较这种集合的性能。

    package cn.lion.test; 
    public class PerformanceTest {
            
             privatestatic final int SIZE =100000;
             publicstatic abstract class Test{
                       privateString operation;
                       publicTest(String operation){
                                this.operation= operation;
                       }
                       publicabstract void test(List<String> list);
                       publicString getOperation(){
                                returnoperation;
                       }
             }
             //执行迭代操作的匿名类
             staticTest iterateTest = new Test("iterate"){
                       publicvoid test(List<String> list){
                                for(inti=0; i<10; i++){
                                         Iterator<String>it = list.iterator();
                                         while(it.hasNext()){
                                                   it.next();
                                         }
                                }
                       }
             };
             //执行随机访问的匿名类
             staticTest getTest = new Test("get"){
                       publicvoid test(List<String> list){
                                for(inti=0; i<list.size(); i++){
                                         for(intk=0; k<10; k++){
                                                   list.get(k);
                                         }
                                }
                       }
             };
             //执行插入的匿名类
             staticTest insertTest = new Test("insert"){
                       publicvoid test(List<String> list){
                                ListIterator<String>it = list.listIterator(list.size()/2);
                                for(inti=0; i<SIZE; i++){
                                         it.add("lion");
                                }
                       }
             };
             //执行删除的匿名类
             staticTest removeTest = new Test("remove"){
                       publicvoid test(List<String> list){
                                ListIterator<String>it = list.listIterator();
                                while(it.hasNext()){
                                         it.next();
                                         it.remove();
                                }
                       }
             };
             staticpublic void testArray(List<String> list){
                       Test[]tests = {iterateTest, getTest};
                       test(tests,list);
             }
             staticpublic void testList(List<String> list){
                       Test[]tests = {insertTest, iterateTest, getTest, removeTest};
                       test(tests,list);
             }
             staticpublic void test(Test[] tests, List<String> list){
                       for(inti=0; i<tests.length; i++){
                                System.out.print(tests[i].getOperation()+ "操作:");
                                longt1 = System.currentTimeMillis();
                                tests[i].test(list);
                                longt2 = System.currentTimeMillis();
                                System.out.print(t2-t1+ "ms");
                                System.out.println();
                       }
             }
             publicstatic void main(String[] args){
                      
                       List<String>list = null;
                       //测试数组的迭代和随机访问操作
                       System.out.println("------测试数组------");
                       String[]tstr = new String[SIZE];
                       Arrays.fill(tstr,"lion");
                       list= Arrays.asList(tstr);
                       testArray(list);
                      
                       tstr= new String[SIZE/2];
                       Collection<String>coll = Arrays.asList(tstr);
                      
                       //测试Vector
                       System.out.println("------测试Vector------");
                       list= new Vector<String>();
                       list.addAll(coll);
                       testList(list);
                      
                       //测试LinkedList
                       System.out.println("------测试LinkedList------");
                       list= new LinkedList<String>();
                       list.addAll(coll);
                       testList(list);
                      
                       //测试ArrayList
                       System.out.println("------测试Vector------");
                       list= new ArrayList<String>();
                       list.addAll(coll);
                       testList(list);
             }
    }
    

       程序运行结果如图

    从结果可以看出,对数组进行随机访问和迭代操作的速度是最快的;对LinkedList进行插入和删除操作的速度是最快的;对ArrayList进行随机访问的速度也很快;Vector类在各方面没有突出的性能,且此类已不提倡使用了。

     

  • 相关阅读:
    C# 枚举 字符串 转换
    调用程序中的资源中的图片文件
    将文件的图标添加到LISTVIEW中
    OpenFileDialog
    关于CSS的优先级,CSS优先级计算,多个class引用
    block,inline和inline-block概念和区别
    jQuery之防止冒泡事件
    OOP中的六种关系以及和JDK或框架中源码进行匹配对应
    Linux创建一个周期任务来定期删除过期的文件
    SpringBoot初探
  • 原文地址:https://www.cnblogs.com/vijozsoft/p/5813693.html
Copyright © 2011-2022 走看看