• 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类在各方面没有突出的性能,且此类已不提倡使用了。

     

  • 相关阅读:
    【其他】UTF-8带签名与不带签名
    【Python】Python 过滤列表
    【EF】EF扩展库(批量操作)
    【python】用 sqlacodegen 将存在的数据库表 转化成model.py
    【python】使用枚举类
    【python】Python: Enum枚举的实现
    【python】python sqlalchemy core
    【python】python字符串前面加u,r,b的含义
    【EF】Entity Framework Core 2.0 特性介绍和使用指南
    Asp.Net 之 前台绑定常用总结
  • 原文地址:https://www.cnblogs.com/vijozsoft/p/5813693.html
Copyright © 2020-2023  润新知