当在数组中间插入数据时它的后面对应的数据都得向后移动,浪费大量时间。
LinkedList是用链表的方式存储。
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,链表比较方便插入和删除操作。
下面是自己验证的一下例子:
public void testList(){ LinkedList linkedlist = new LinkedList(); List arraylist = new ArrayList(); for(int m=0;m<800000;m++){ linkedlist.add(m,"a"); } for(int n=0;n<800000;n++){ arraylist.add(n, "a"); } long time3 = new Date().getTime(); for(int m=0;m<20000;m++){ linkedlist.add(m,"a"); //当在800000条数据之前插入20000条数据时,LinkedList只用了468多ms.这就是LinkedList的优势所在 } long time4 = new Date().getTime(); System.out.print("batch linkedlist add:"); System.out.println(time4 - time3); for(int n=0;n<20000;n++){ arraylist.add(n, "a"); //当在800000条数据之前插入20000条数据时,ArrayList用了19032多ms.时间花费是arraylist的近40倍(视测试时机器性能) } long time5 = new Date().getTime(); System.out.print("batch arraylist add:"); System.out.println(time5 - time4); }
希望有帮助!~