近期在做一个对接京东的电商平台,所以对各个地方的效率考虑的比较多,今天深挖了一下ArrayList与LinkedList的区别以及对应List使用foreach与使用下标遍历的效率问题,首先说一下两种List的区别。


ArrayList是基于动态数组的数据结构,而LinkedList基于链表的数据结构

从根本上考虑,数组在物理地址上是连续的,而链表使用指针将各个元素串起来

那么基于两种List的数据结构,可以判断出在对数据进行查找时ArrayList比LinkedList效率高,因为数组结构的遍历只需将下标加一,而链表结构则需要获取下一节点的地址将指针移动到下一节点,而在对元素进行增删时LinedList会比ArrayList好用,链表结构可以很轻松的在链表中间去增删元素,而不需要改变插入节点后面元素的任何数据,但数组结构如果要在数组中间插入元素那么需要改变插入后元素的下标,但如果是在List最后加入元素那么效率上差距不大。

好了说完两种List再来说一下foreach与下标遍历的区别,直接上例子

这是java 文件中编写的foreach循环

for(Object obj : list){
System.out.println(obj);
}

对java文件编译后的class文件进行反编译得

for(java.util.Iterator i$ = list.iterator(); i$.hasNext();)
{
String s = (String) i$.next();
{
System.out.println(s);
}
}

结果显示,其实foreach其实和for在语法上没有任何区别,唯一的区别是foreach使用了迭代器

而效率问题下面直接给出测试结果:分别在for循环与foreach循环下arrayList与linkedList的效率

在数据量1W的时候

在数据量10W的时候

首先不管怎样 可以看到for 循环 linkedList时可以看到效率极慢,所以大家一定注意这点

再是随着数据量的提升linkedList运行时间乘级上升,所以注意在数据量大的是一定要避免使用linkedList

然后可以看到在数据量10W之前foreach的效率比for循环效率略高

抱着怀疑的态度对1000W的循环量进行了测试结果如下

结果却是循环下标比foreach快,为了排除偶然因素再测一遍

确认foreach在数据量比较大的情况下比下标循环要慢

那为什么会这样呢,究其原因我觉得是ArrayList对随机访问效率高

这样使用下标访问效率本身很高.foreach内部封装了几个对下标的方法,所以自己for比foreach更直接,所以数据量大的时候效率稍高些,但差别不会太大,仍然在一个数量级上

JAVA中ArrayList与LinkedList的区别以及对应List使用foreach与使用下标遍历的效率问题的更多相关文章

  1. Java中ArrayList与LinkedList的区别

    Java中ArrayList与LinkedList的区别 一般大家都知道ArrayList和LinkedList的区别: 1. ArrayList的实现是基于数组,LinkedList的实现是基于双向 ...

  2. java中ArrayList 和 LinkedList 有什么区别

    转: java中ArrayList 和 LinkedList 有什么区别 ArrayList和LinkedList都实现了List接口,有以下的不同点:1.ArrayList是基于索引的数据接口,它的 ...

  3. Java中arraylist和linkedlist源代码分析与性能比較

    Java中arraylist和linkedlist源代码分析与性能比較 1,简单介绍 在java开发中比較经常使用的数据结构是arraylist和linkedlist,本文主要从源代码角度分析arra ...

  4. Java中ArrayList和LinkedList区别 时间复杂度 与空间复杂度

    一般大家都知道ArrayList和LinkedList的大致区别:      1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构.      2.对于随机访问 ...

  5. Java中ArrayList和LinkedList区别

    ArrayList和LinkedList的大致区别如下:1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构. 2.对于随机访问get和set,ArrayLis ...

  6. Java中ArrayList和LinkedList区别、ArrayList和Vector的区别

    一般大家都知道ArrayList和LinkedList的大致区别: 1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构. 2.对于随机访问get和set,Ar ...

  7. java中ArrayList、LinkedList、Vector的区别

    ArrayList.LinkedList.Vector这三个类都实现了List接口. ArrayList是一个可以处理变长数组的类型,可以存放任意类型的对象.ArrayList的所有方法都是默认在单一 ...

  8. Java基础-ArrayList和LinkedList的区别

    大致区别:  1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构. 2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为Lin ...

  9. Java中ArrayList和LinkedList差别

    一般大家都知道ArrayList和LinkedList的大致差别: 1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构.  2.对于随机訪问get和set.A ...

随机推荐

  1. c++ 计算cpu占用率

    计算CPU占用率就是获取系统总的内核时间 用户时间及空闲时间 其中空闲时间就是内核空转 所以内核时间包含空闲时间 然后计算 运行时间 = 内核时间 加 用户时间 减去 空闲时间 间隔时间 =  内核时 ...

  2. 【mysql】decimal数据类型

    1.float.double.decimal float:浮点型,4字节,32bit. double:双精度实型,8字节,64位 decimal:数字型,128bit,不存在精度损失,常用于银行帐目计 ...

  3. django网页分页

    blog/views.py from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger #导入分页插件包 def  ...

  4. 获取IP地址方法

    function getip() {     static $ip = '';     $ip = $_SERVER['REMOTE_ADDR'];     if(isset($_SERVER['HT ...

  5. JQuery对checkbox的操作

    对复选框组的全选.全不选.不全选,获取选中的复选框的值的操作 点击全选按钮,复选框组全部选中或者全部取消. 实现全选按钮和复选框组的联动,当复选框组中有一个没有被选中后,那么id=‘checkedAl ...

  6. bzoj4556(sam)

    二分答案,(具体可见http://blog.csdn.net/neither_nor/article/details/51669114),然后就是判定问题,sa和sam都可以做,用sam写了一下,先用 ...

  7. Makefile入门

    相信大家对makefile都不陌生,在Linux下编写程序基本都离不开makefile的编写,我们都知道多个.c文件经过编译器编译后得到多个.o文件,这些文件是互相独立的,但最终我们要得到一个可正常运 ...

  8. org.apache.subversion.javahl.ClientException: Previous operation has not finished

    1.问题 eclipse使用SVN出现异常: org.apache.subversion.javahl.ClientException: Previous operation has not fini ...

  9. oracle数据库创建分区表

    参考资料:http://blog.chinaunix.net/uid-21943216-id-4062400.html 一.建按月自增分区表:1.1建表SQL> create table mon ...

  10. Vuejs——(12)组件——动态组件

    版权声明:出处http://blog.csdn.net/qq20004604   目录(?)[+]   本篇资料来于官方文档: http://cn.vuejs.org/guide/components ...