蒲公英网站建设,中信建设有限责任公司 人力资源部,网页设计培训班学校排名,app设计大赛java 中ArrayList与LinkedList性能比较今天看一框架的代码#xff0c;看到有些 可以使用ArrayList的地方 使用的是 LinkedList#xff0c;用到的情景是在一个循环里面进行顺序的插入操作。众所周知java里面List接口有两个实现ArrayList 和 LinkedList#xff0c;他们的实现原…java 中ArrayList与LinkedList性能比较今天看一框架的代码看到有些 可以使用ArrayList的地方 使用的是 LinkedList用到的情景是在一个循环里面进行顺序的插入操作。众所周知java里面List接口有两个实现ArrayList 和 LinkedList他们的实现原理分别是c语言中介绍的数组和链表。正如学习数据结构时的认识对于插入操作链表的结构更高效原因是可以通过修改节点的指针 就可以完成插入操作 而不像数组需要把插入位置之后的数组元素依次后移。但是实际情况真如上面设想一样吗下面通过一个简单的例子实践看能得出什么结论。public static void main(String[] args) {List arrayList new ArrayList();List linkedList new LinkedList();long time1 System.currentTimeMillis();for(int i 0; i 1000000; i) {arrayList.add(new String(abc));}long time2 System.currentTimeMillis();for(int i 0; i 1000000; i) {linkedList.add(new String(abc));}long time3 System.currentTimeMillis();System.out.println(arrayList.insert_time (time2 - time1));System.out.println(linkedList.insert_time (time3 - time2));long time11 System.currentTimeMillis();for(int i 0; i 10000; i) {int random RandomUtils.nextInt(10000);String temp arrayList.get(random);}long time12 System.currentTimeMillis();for(int i 0; i 10000; i) {int random RandomUtils.nextInt(10000);String temp linkedList.get(random);}long time13 System.currentTimeMillis();System.out.println(arrayList.read_time (time12 - time11));System.out.println(linkedList.read_time (time13 - time12));}运行结果arrayList.insert_time 188linkedList.insert_time 250arrayList.read_time 16linkedList.read_time 234通过结果可以看出无论什么情况ArrayList更加高效。尤其对于随机读取数组的效率是链表的14倍之多。而插入操作两者用时相差不多但是还是数组的实现效率高一些。对于其中原因仔细想想也不难想明白。当List存储的内容不多时写入List的最后的元素ArrayList和LinkedList用时差不多。但是当List存储的元素个数很大时通过数组结构实现的ArrayList插入到最后可以通过数组下标很快访问到但是LinkedList就需要访问每个节点直到找到最后的元素再进行插入操作这中操作步骤的耗时是巨大的所以列表数量越大LinkedList就越感吃力了。当然对于要求随机插入的场景这个时候LinkedList就要比ArrayList适合了。感谢阅读希望能帮助到大家谢谢大家对本站的支持