java List集合记录 ArrayList和LinkedList的区别

来源:互联网 发布:帕特森 知乎 编辑:程序博客网 时间:2024/06/05 06:02

1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
2.对于元素的查找,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为只需要移动指针的位置。ArrayLis需要移动数据。简单举例如下

只要在大量炒作数据的时候才会看出 两者之间的区别  每次像第一个元素放入一个数字 结果运行如下


        List<Object> link = new LinkedList<>();
        List<Object> arry = new ArrayList<>(30000);
        long time1 = new Date().getTime();
        for (int m = 0; m < 200000; m++) {
            link.add(0, null); // 当在200000条数据之前插入20000条数据时,LinkedList只用了1125多ms.这就是LinkedList的优势所在
        }
        long time2 = new Date().getTime();
        System.out.println("LinkedList cost time:" + (time2 - time1));
        for (int n = 0; n < 200000; n++) {
            arry.add(0, null); // 当在200000条数据之前插入20000条数据时,ArrayList用了18375多ms.时间花费是arraylist的近20倍(视测试时机器性能)
        }
        long time3 = new Date().getTime();
        System.out.print(" arraylist cost time:"+(time3-time2));

     LinkedList cost time:12  
     arraylist cost time:74

因为每次操作数据的时候 每个元素都需要后移移动次数较多 空间复杂度高 而LinkedList只需要变更 第一个元素的指针的位置即可 因此性能快。

如果每次只是在集合的末尾追加一个元素 性能几乎是一样的  代码如下。扩大循环次数




数组的内置函数 例如 indexOf,lastIndexOf,contains 几乎没有什么区别 不在赘述。

ArrayList 随机访问速度要快于LinkedList. 只是理论上分析,事实上相差不是很大。代码衔接上面


1 0
原创粉丝点击