一、ArrayList、LinkList、List的区别:
提示:此问题面试基本上都会问到
- List是一个接口,ArrayList和LinkLIst是两个实现类;
- 它们的实现方式不一样,其实LinkList才是真正的链表;
- 而ArrayList是用数组的方式实现的,它不是真正的链表,在初始化的时候它先对数组设置一个初始容量,当数组空间不够的时候,它会重新构建一个容量更大的数组,然后把先前的元素拷贝进去;
- ArrayList和LinkList最基本的区别就是数组和列表这两种数据结构的区别。
- ArrayList:缺点是内容使用量要大一些,添加或者删除元素的效率低下。元素随机访问的效率比较高。LinkList则相反
拓展学习: - ArrayList就是动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了动态的增加和减少元素,实现了Collection和List的接口,灵活设置数据大小的优点;
- List接口的大小可变数组的实现,位于API文档的java.util.ArrayList。实现了所有可选列表的操作,并允许包括null在内的所有元素。除了实现List接口外,此类还提供了一些方法来操作内部用来存储列表数据的大小。
- 每个ArrayList实例都有一个容量,该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小。
- 随着ArrayList中不断的添加元素,其容量也是自动增长的。并未指定增长策略的细节,因为这不只是添加元素会带来分摊固定开销时间那样简单。
10.注意,迭代器的快速失败行为无法得到保证,因为一般来说,不可能对是否出现不同步并发修改做出任何硬性保证。快速失败迭代器会尽最大努力抛出ConcurrentModificationException异常。