四、ArrayList和LinkedList内部的实现大致是怎样的?
来源:互联网 发布:无线音响 知乎 编辑:程序博客网 时间:2024/06/14 10:03
1、ArrayList集合
ArrayList是List接口的一个实现类,它是程序中最常见的一种集合。在ArrayList内部封装了一个长度可变的数组对象,当存入的元素超过数组长度时,ArrayList会在内存分配一个更大的数组来存储这些元素,因此ArrayList集合看做一个长度可变的数组。
2、LinkedList集合
LinkedList是List接口的另一个实现类。该集合内部维护了一个双向循环链表,链表中的每一个元素都使用引用的方式来记住它的前一个元素和后一个元素。
3、时间复杂度
//get方法两者之间的对比
package com.jqka;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
public class ListTest{
public static final int N=50000;
public static List values;
static{
Integer vals[]=new Integer[N];
Random r=new Random();
for(int i=0,currval=0;i<N;i++){
vals[i]=new Integer(currval);
currval+=r.nextInt(100)+1; //随机生成1~100之间的整数
}
values=Arrays.asList(vals);//将一个数组转化为一个List对象
}
static long timeList(List lst){
long start=System.currentTimeMillis();
for(int i=0;i<N;i++){
int index=Collections.binarySearch(lst, values.get(i));
if(index!=i)
System.out.println("***错误***");
}
return System.currentTimeMillis()-start;
}
public static void main(String args[]){
System.out.println("ArrayList消耗时间:"+timeList(new ArrayList(values)));
System.out.println("LinkedList消耗时间:"+timeList(new LinkedList(values)));
}
}
运行结果:
ArrayList消耗时间:11
LinkedList消耗时间:3842
//add方法两者之间的对比
package com.jqka;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class ListDemo {
static final int N=50000;
static long timeList(List list){
long start=System.currentTimeMillis();
Object o = new Object();
for(int i=0;i<N;i++)
list.add(0, o);
return System.currentTimeMillis()-start;
}
public static void main(String[] args) {
System.out.println("ArrayList耗时:"+timeList(new ArrayList()));
System.out.println("LinkedList耗时:"+timeList(new LinkedList())); } }
运行结果:
ArrayList耗时:189
LinkedList耗时:4
总结:
1、ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
2、由于数组的结构允许程序通过索引的方式来访问元素,因此,对于随机访问get和set,ArrayList优于LinkedList,ArrayList可以随机定位,而LinkedList要移动指针一步一步到节点处。
3、对于add和remove,LinkedList就比较占优势,只需要对指针进行修改即可,而ArrayList要移动数据来填补被删除的空间。
阅读全文
0 0
- 四、ArrayList和LinkedList内部的实现大致是怎样的?
- ArrayList和LinkedList的大致区别
- ArrayList和LinkedList的大致区别
- ArrayList和LinkedList的大致区别
- ArrayList和LinkedList的大致区别:
- ArrayList和LinkedList的大致区别
- ArrayList和LinkedList的大致区别
- java中的线性表的内部实现(ArrayList、LinkedList)
- ArrayList和LinkedList底层实现的区别
- ArrayList和LinkedList底层实现的区别
- ArrayList和LinkedList的简单实现
- ArrayList和LinkedList的自我实现
- ArrayList和LinkedList底层实现的区别
- ArrayList、LinkedList和HashSet、TreeSet以及HashMap、TreeMap是如何实现存储的?
- ArrayList、LinkedList和HashSet、TreeSet以及HashMap、TreeMap是如何实现存储的?
- ArrayList、LinkedList和HashSet、TreeSet以及HashMap、TreeMap是如何实现存储的?
- linkedlist和arraylist的区别
- ArrayList和LinkedList的区别
- 动态网页开发基础
- SpringMVC-3之拦截器
- CF #420 A. Okabe and Future Gadget Laboratory
- NAT与代理服务器
- AndroidThings学习笔记--熟悉RPI3硬件
- 四、ArrayList和LinkedList内部的实现大致是怎样的?
- [LeetCode] 129. Sum Root to Leaf Numbers
- 集成学习(ensemble methods)概述
- Spring基于tx/aop声明式事务配置
- JS实现快速排序(2种方法)
- tomcat之定义404页面,自定义tomcat默认访问页面
- Android 版本更新
- 学习NSLog()和@"字符串"
- 剑指Offer--替换空格