ArrayList和LinkedList比较

(1)元素新增性能比较

public class Test5 {
    public static int ITERATION_NUM = 100000;
    public static void main(String[] args) throws InterruptedException {
        insertPerformanceCopare();
    }
    public static void insertPerformanceCopare() throws InterruptedException {
        Thread.sleep(5000);
        System.out.println("LinkedList新增元素测试开始");
        long start = System.nanoTime();
        List<Integer> linkedList = new LinkedList<>();
        for (int i = 0; i < ITERATION_NUM; i++) {
            linkedList.add(i);
        }
        long end = System.nanoTime();
        System.out.println(end-start);
        System.out.println("ArrayList新增元素测试开始");
        start = System.nanoTime();
        List<Integer> arrayList = new ArrayList<>();
        for (int i = 0; i < ITERATION_NUM; i++) {
            arrayList.add(i);
        }
         end = System.nanoTime();
        System.out.println(end-start);
    }
}

随机三次测试结果:

第一次:

LinkedList新增元素测试开始
6716400
ArrayList新增元素测试开始
2602400

第二次:

LinkedList新增元素测试开始
8199100
ArrayList新增元素测试开始
2819700

第三次:

LinkedList新增元素测试开始
5298600
ArrayList新增元素测试开始
2307800

(2)元素查询性能比较

public class Test6 {
    public static int ITERATION_NUM = 100000;
    public static void main(String[] args) throws InterruptedException {
        getPerformanceCompare();
    }
    public static void getPerformanceCompare() throws InterruptedException {
        Thread.sleep(5000);
        List<Integer> arrayList = new ArrayList<>();
        for (int i = 0; i <ITERATION_NUM ; i++) {
            arrayList.add(i);
        }
        List<Integer> linkedList = new LinkedList<>();
        for (int i = 0; i <ITERATION_NUM ; i++) {
            linkedList.add(i);
        }
        Random random = new Random();
        System.out.println("LinkedList获取元素测试开始");
        long start = System.nanoTime();
        for (int x = 0; x < ITERATION_NUM; x++) {
            int j = random.nextInt(x + 1);
            int k = linkedList.get(j);
        }
        long end = System.nanoTime();
        System.out.println(end - start);

        System.out.println("ArrayList获取元素测试开始");
        start = System.nanoTime();
        for (int x = 0; x < ITERATION_NUM; x++) {
            int j = random.nextInt(x + 1);
            int k = arrayList.get(j);
        }
        end = System.nanoTime();
        System.out.println(end - start);
    }
}

随机三次测试结果:

第一次:

LinkedList获取元素测试开始
2487867100
ArrayList获取元素测试开始
2743600

第二次:

LinkedList获取元素测试开始
2573786900
ArrayList获取元素测试开始
4673500

第三次:

LinkedList获取元素测试开始
2526830600
ArrayList获取元素测试开始
4191300

(3)ArrayList和LinkedList存储数据的区别

1.ArrayList底层是数组
   LinkedList底层是双向链表
 2.ArrayList 的特征:
        查询快: 底层是索引,有序的通过内存有序地址,直接找到 时间复杂度  o(1)
        增删慢: 增加数据和删除数据有可能扩容。每次扩1.5倍。扩容的话,浪费内存浪费时间o(n)
  3.LinkedList的特征:
        查询慢:底层是二分法查找的算法 时间复杂度是log以2为底 n的对数
        增删快:直接找前置结点 Node prev,后继结点 Node next。时间复杂度是 o(1)

(4)测试结果分析

ArrayList添加元素效率与LinedList速度相差不大,但是查询效率远远优于LinkedList。结论就是开发中不会选择LinkedList处理数据。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值