最新曾神Zaoeyo 完整C4D高级影像风格图和方形动态影像设计课程百度云分享

momentor大佬曾神 一期二期(完整版课点击我获取

==============================================================

在百度一开始网盘基础面的时候,很多面试官可能会问List集合一些基础知识,比如:

  • ArrayList默认教程大小是多少,是如何扩容的?
  • ArrayListLinkedList的底层数据结构是什么?
  • ArrayListLinkedList的区别?分别用在什么场景?
  • 为什么说ArrayList查询快而增删慢?
  • Arrays.asList方法后的List可以扩容吗?
  • modCount在非线程安全集合中的作用?
  • ArrayListLinkedList的区别、优缺点以及应用场景

    • *

ArrayList(1.8)

ArrayList是由动态再分配的Object[]数组作为底层结构,可设置null值,是非线程安全的。

ArrayList成员属性

//默认的空的数组,在构造方法初始化一个空数组的时候使用
private static final Object[] EMPTY_ELEMENTDATA = {};

//使用默认size大小的空数组实例 private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; //ArrayList底层存储数据就是通过数组的形式,ArrayList长度就是数组的长度。 transient Object[] elementData; //arrayList的大小 private int size;

那么ArrayList底层数据结构是什么呢?

很明显,使用动态再分配的Object[]数组作为ArrayList底层数据结构了,既然是使用数组实现的,那么数组特点就能说明为什么ArrayList查询快而增删慢?

因为数组是根据下标查询不需要比较,查询方式为:首地址+(元素长度*下标),基于这个位置读取相应的字节数就可以了,所以非常快;但是增删会带来元素的移动,增加数据会向后移动,删除数据会向前移动,导致其效率比较低。

猜你喜欢

转载自www.cnblogs.com/weiwei186/p/13171912.html