zoukankan      html  css  js  c++  java
  • ArrayList与LinkedList常见的问题

    Question1: 常见的List类有哪些,它们分别有什么区别?

    答:常见的有ArrayList,Vector,LinkedList等。ArrayList底层是数组组成,Vector是线程安全的ArrayList类。LinkedList底层是由链表组成。ArrayList与Vector的区别,扩容上面ArrayList是扩容1.5倍,而Vector是扩容两倍。Vector是线程安全的使用synchronized关键字来保证线程安全,但是效率更低。

    Question2: ArrayList是如何增加容量的?

    答: 当存入数据到ArrayList中去的时候,都需要检查容量是否够,如果够的话,直接存入即可。如果不够的话,就会启动扩容机制,首先扩容至原容量的1.5倍大小,判断是否足够,如果不够就按照当前的容量扩容。当前的容量需要判断是否小于最大的容量(Integer.MAX_VALUE-8),如果不小于,则扩容至最大的容量,Integer的最大值。

    Question3:ArrayList和LinkedList在实际应用中应该如何选择?

    答:ArrayList实现了RandomAccess接口,支持快速随机访问,访问的速度很快,而ArrayList在增加和删除元素的时候,每次增加或者删除一个元素,由于是数组实现的,所有的数据都需要移动n次(就是用System.arrayCopy实现的),这是一种极为消耗资源的操作。但是LinkedList就不同,LinkedList底层是链表实现的,增加和删除元素较快,查找的话比较慢。所以一般在实际应用中,如果涉及到大量的查找的话,使用ArrayList,涉及到大量的增删操作的话,建议使用LinkedList。

    ArrayList与LinkedList都允许存储null也允许存储重复元素。不要使用for循环遍历LinkedList,效率很低。

    Question5: Arrays.asList之后获得的集合能够扩容吗?

    答:不能扩容,因为这样获取到的一个集合是final的。所以不能够扩容或者修改

           private final E[] a;
    
            ArrayList(E[] array) {
                a = Objects.requireNonNull(array);
            }

    Question6:LinkedList与ArraysList对比有哪些不足?

    答: 除了查找比较慢之外,在LinkedList中每个元素都存有一个向前的指针和一个向后的引用,更占用内存。

    Question7:数组Array与ArrayList有什么区别,分别适用什么场景?

    答: Array是长度不能改变的数组,ArrayList是长度可以改变的数组,Array中可以存储基本类型和对象,ArrayList中只能存储对象。如果知道数组容量的大小可以使用Array,如果不知道容量的话,可以使用ArrayList。

  • 相关阅读:
    HUST 1372 marshmallow
    HUST 1371 Emergency relief
    CodeForces 629D Babaei and Birthday Cake
    CodeForces 629C Famil Door and Brackets
    ZOJ 3872 Beauty of Array
    ZOJ 3870 Team Formation
    HDU 5631 Rikka with Graph
    HDU 5630 Rikka with Chess
    CodeForces 626D Jerry's Protest
    【POJ 1964】 City Game
  • 原文地址:https://www.cnblogs.com/caoxixi/p/12050519.html
Copyright © 2011-2022 走看看