ArrayList和LinkedList是List集合下的的两个常用的实现类集合
而List集合是java中三大集合中的一个,(java中集合分为两大类:Collection、Map;而Collecton又细化为两个集合:List、Set;List、Set、Map统称为java中三大集合------说明一点,上述几类集合都是接口)
共同点:
集合中对象是按照索引存储,允许元素重复
区别:
ArrayList:基于数组实现的,做查询和修改的时候速度快,做增加删除操作的速度慢,
在Java7之前ArrayList在创建对象,一个元素也不存储时,即
ArrayList list = new ArrayList();
在堆中开辟一个空间大小为10的空间;在Java7之后有一个优化,即只创建一个空的集合,不会在堆中开辟一个大小为10的空间,而是一个空数组,当第一次调用add()方法,才会初始化空间。
集合的大小是自动扩容,方式为原数组大小的1.5倍+1----->然后使用System类中copy方法对原数组数据进行复制到新数组
LinkedList:增加和删除操作较快,查询和更改操作较慢
主要实现:双向列表,数组,队列(单向、双向),栈
PS:100W以下数据使用两者没有任何性能区别
面试会考的问题:任何实现LinkedList
class LinkedList{
Node first
Node last
int size
//链表中 节点
class Node{
Node Prev //上一个
Node next //下一个
Object ele //数据
}
//向链表中添加数据
addFirst(){
if(size == 0){
this.fisrt = node
this.last = node
}else{
//向前
node.next = this.first
this.first.prev = node
this.first = node
//向后
this.last.next = node
node.prev = this.last
this.last = node
}
size++
}
}