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。

  • 相关阅读:
    2021暑假模拟赛6
    2021暑假模拟赛5
    2021暑假模拟赛4
    2021暑假模拟赛3
    2021暑假模拟赛2
    umi提速方案之 mfsu
    Nginx (可为容器)配置 BasicAuth 与访问
    Mango 漫画管理器体验
    blivechat 在 OBS 中使用 BasicAuth URL 登录
    Electron 实现最小化到托盘
  • 原文地址:https://www.cnblogs.com/caoxixi/p/12050519.html
Copyright © 2011-2022 走看看