java的数据结构与算法的day06

        前几天我们了解到Collection接口与List接口,如果要实现它们还是特别的繁琐,所以我们今天介绍List ADT的两种流行的实现方式:

        ArrayList类提供了List ADT的一种可增长的数组的实现,使用ArrayList的优点在于,对与get和set的调用花费常数时间。其缺点是新项的插入和现有项的删除代价昂贵。

        LinkedList类提供了List ADT的双链实现的,使用优点在于,新项的插入和现有项的删除都开销很小。所以,LimkedList提供了方法addFirst和removeFirst等有效的方法添加与删除。

        这么说,大家可能还不相信时间开销的是不是真的,接下来我通过代码测试,来展现结果:!

package List版本;

import java.util.ArrayList;
import java.util.LinkedList;

public class example_02 {
    public static void main(String[] args) throws Exception{
        long total1 = 0;
        long total2 = 0;

         System.out.println("测试ArrayList");
         long array_start1 = System.currentTimeMillis();
         ArrayList arrayList = new ArrayList();
         arrayList = add(arrayList,99999);
         long array_end1 = System.currentTimeMillis();
         System.out.println("添加元素,一共用时间:"+(array_end1-array_start1)+"ms");

         long array_start2 = System.currentTimeMillis();
         total1 = sum(arrayList);
         long array_end2 = System.currentTimeMillis();
         System.out.println("遍历元素,一共用时间:"+(array_end2-array_start2)+"ms"+"共计元素值总和:"+total1);

        long array_start3 = System.currentTimeMillis();
        arrayList = insert(arrayList,3,99999);
        long array_end3 = System.currentTimeMillis();
        System.out.println("插入元素,一共用时间:"+(array_end3-array_start3)+"ms");


        /**
         *
         */
        System.out.println("测试LinkedList");
        long linked_start1 = System.currentTimeMillis();
        LinkedList linkedList = new LinkedList();
        linkedList = add(linkedList,99999);
        long linked_end1 = System.currentTimeMillis();
        System.out.println("添加元素,一共用时间:"+(linked_end1-linked_start1)+"ms");

        long linked_start2 = System.currentTimeMillis();
        total2 = print(linkedList);
        long linked_end2 = System.currentTimeMillis();
        System.out.println("遍历元素,一共用时间:"+(linked_end2-linked_start2)+"ms"+"共计元素值总和:"+total2);

        long linked_start3 = System.currentTimeMillis();
        linkedList = insert(linkedList,3,99999);
        long linked_end3 = System.currentTimeMillis();
        System.out.println("插入元素,一共用时间:"+(linked_end3-linked_start3)+"ms");
    }
    public static ArrayList add(ArrayList a ,long  n){
        for(long i=0 ; i<n ; i++){
            a.add(i);
        }
        return a;
    }
    public static LinkedList add(LinkedList l , long n){
        for(long i=0 ; i<n ; i++){
            l.add(i);
        }
        return l;
    }
    public static long sum(ArrayList a){
        long s = 0 ;
        long t ;
        for(int i = 0 ; i < a.size() ; i++){
            t = (long)a.get(i);
            s = s + t ;
        }
        return s;
    }
    public static long print(LinkedList l){
        long s = 0 ;
        long t ;
        for(int i = 0 ; i < l.size() ; i++){
            t = (long)l.get(i);
            s = s + t ;
        }
        return s;
    }
    public static ArrayList insert(ArrayList a,int index , int sum){
        for(int i = 0 ; i < sum ; i++){
            a.add(index,i);
        }
        return a;
    }
    public static LinkedList insert(LinkedList l , int index , int sum){
        for(int i=0 ; i<sum ; i++){
            l.add(index,i);
        }
        return l;
    }
}

        下面这个是,展现这次测试的结果:,很显然,在两者进行初始化写入数据的时候,不分伯仲;在获取数据的时候,ArrayList类的时间开销获胜;在插入数据的时候,LinkedList类的时间开销获胜。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值