章
目
录
Java面试题:谈谈你对Java ArrayList的理解
得分点
- 数组实现
- 默认容量为10
- 每次扩容1.5倍
标准回答
ArrayList是一种基于数组实现的数据结构,它的内部封装了一个Object[]数组。当我们使用默认构造器创建一个ArrayList容器时,初始时该数组为空,只有在首次添加数据时才会将其初始化为长度为10的数组。此外,我们也可以通过有参构造器来创建ArrayList,并显式指定数组的容量,这时候数组会被初始化为指定容量的大小。
如果我们往ArrayList中添加数据导致超出数组长度限制,就会触发自动扩容操作,即将数据从旧数组拷贝到新数组中,而新数组的长度通常为原来的1.5倍。需要注意的是,ArrayList也支持缩容,但并不会自动进行缩容操作,即使ArrayList中只剩下少量数据时也不会主动缩减容量。如果我们希望减小ArrayList的容量,需要手动调用其trimToSize()
方法,此时数组的大小会根据实际元素个数进行缩减。
加分回答
另外,在ArrayList的实现中,它使用了数组来存储数据,这使得它具有快速的随机访问能力。不仅如此,ArrayList是Java集合框架中的一部分,它实现了List接口,而List接口继承自Collection接口。这意味着ArrayList可以像其他集合一样使用迭代器来遍历其元素。它提供了iterator()
方法,返回一个Iterator迭代器,用于遍历集合元素。
不仅如此,ArrayList还单独提供了listIterator()
方法,该方法返回一个ListIterator迭代器,它是Iterator的子接口。ListIterator除了具备向前遍历的能力,还具有在迭代过程中修改数据的功能,这是Iterator所不具备的。这使得ArrayList在遍历和修改数据方面更加灵活,为开发者提供了更多的操作选项。