博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ArrayList与LinkedList的区别
阅读量:4129 次
发布时间:2019-05-25

本文共 2410 字,大约阅读时间需要 8 分钟。

List ADT有两种流行的实现方式。

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

2.LinkedList类则提供了List ADT的双链表实现。使用LinkedList的优点在于,新项的插入和现有项的删除均开销很小,这里假设变动项的位置是已知的。

解释下数组类型和双链表的区别

a.数组

b.双链表

import java.util.* ;public class ListDemo01{	public static void main(String args[]){		List
li = new LinkedList
() ; long startTime = System.currentTimeMillis() ; for(int i=0;i<1000000;i++){ li.add(0,i) ; //print : 803 //li.add(i) ; //print : 790 } long endTime = System.currentTimeMillis() ; System.out.println(endTime-startTime) ; }}

下面的代码得不出结果速度太慢

import java.util.* ;public class ListDemo01{	public static void main(String args[]){		List
li = new LinkedList
() ; for(int i=0;i<1000000;i++){ li.add(0,i) ; //print : 803 //li.add(i) ; //print : 790 } long startTime = System.currentTimeMillis() ; for(int i=0;i<1000000;i++){ li.get(i) ; } long endTime = System.currentTimeMillis() ; System.out.println(endTime-startTime) ; }}
下面化成ArrayList速度就超快

import java.util.* ;public class ListDemo01{	public static void main(String args[]){		List
li = new ArrayList
() ; for(int i=0;i<1000000;i++){ li.add(i) ; } long startTime = System.currentTimeMillis() ; for(int i=0;i<1000000;i++){ li.get(i) ; //print : 15 } long endTime = System.currentTimeMillis() ; System.out.println(endTime-startTime) ; }}
remove方法对LinkedList类的使用

a.利用iterator类

import java.util.* ;public class ListDemo01{	public static void main(String args[]){		List
li = new LinkedList
() ; for(int i=0;i<1000000;i++){ li.add(i) ; } long startTime = System.currentTimeMillis() ; Iterator
it = li.iterator() ; while(it.hasNext()){ if(it.next()%2==0){ it.remove() ; } } long endTime = System.currentTimeMillis() ; System.out.println(endTime-startTime) ; }}
b.不利用iterator的话则则需要调用get方法。则效率很低

import java.util.* ;public class ListDemo01{	public static void main(String args[]){		List
li = new LinkedList
() ; for(int i=0;i<1000000;i++){ li.add(i) ; } long startTime = System.currentTimeMillis() ; for(int i=0;i<10000;i++){ if(li.get(i)%2==0){ li.remove(i) ; } } long endTime = System.currentTimeMillis() ; System.out.println(endTime-startTime) ; }}

转载地址:http://whwvi.baihongyu.com/

你可能感兴趣的文章
collect2: ld returned 1 exit status
查看>>
C#入门
查看>>
C#中ColorDialog需点两次确定才会退出的问题
查看>>
数据库
查看>>
nginx反代 499 502 bad gateway 和timeout
查看>>
linux虚拟机安装tar.gz版jdk步骤详解
查看>>
python实现100以内自然数之和,偶数之和
查看>>
python数字逆序输出及多个print输出在同一行
查看>>
苏宁产品经理面经
查看>>
百度产品经理群面
查看>>
去哪儿一面+平安科技二面+hr面+贝贝一面+二面产品面经
查看>>
element ui 弹窗在IE11中关闭时闪现问题修复
查看>>
vue 遍历对象并动态绑定在下拉列表中
查看>>
Vue动态生成el-checkbox点击无法选中的解决方法
查看>>
python __future__
查看>>
MySQL Tricks1
查看>>
python 变量作用域问题(经典坑)
查看>>
pytorch
查看>>
pytorch(三)
查看>>
ubuntu相关
查看>>