一.
ArrayList底层采用数组实现,如果我们用new ArrayList()方式构造对象,底层会生成一个长度为10的数组,
该数组就存放往ArrayList中增加的内容,一旦数组元素存放满了,ArrayList就会生成一个新的数组,该数组的长度为原数组长度的1.5倍+1,接下来将原数组的内容全部拷贝到新数组中,最后将新增的内容附加到新数组的最后面。
二.
ArrayList查找速度快,而删除元素、插入元素速度慢。
三.
LinkedList底层采用双向循环链表实现,查找速度慢,而删除元素、插入元素速度快。
四.
自己编写双向链表的实现
//双向循环链表的实现
public class TestList {
public static void main(String[] args) {
MyList m1=new MyList("one");
MyList m2=new MyList("two");
MyList m3=new MyList("three");
m1.next=m2;
m1.previous=m3;
m2.next=m3;
m2.previous=m1;
m3.next=m1;
m3.previous=m2;
//插入一个元素
MyList m4=new MyList("four");
m1.next=m4;
m4.previous=m1;
m4.next=m2;
m2.previous=m4;
System.out.println(m1.next.previous.next.next.date);
//删除一个元素
m1.next=m2;
m2.previous=m1;
m4.previous=null;
m4.next=null;
System.out.println(m1.next.previous.next.next.date);
}
}
class MyList{
String date;
MyList previous;
MyList next;
public MyList(String date){
this.date=date;
}
}