一、LinkedList的offer与add的区别?
offerXXX 属于 Deque 的接口
addXXX 属于 Collection 的接口。
addXXX方法没有返回值,而offer方法会返回boolean。
作为List使用时,一般采用add / get方法来压入/获取对象。
作为Queue使用时,才会采用offer/poll/take等方法。
作为Deque使用时,用offerXXX/pollXXX等方法更容易理解。(加分项)而且,当把LinkedList用作Deque时候,我习惯使用Deque引用。因为设计模式其中的一个原则就是:尽量面向接口,而不是具体的实现类。(这样就凸显你不仅在链表有扎实的基础,而且设计模型也是能随手拈来)
二、LinkedList 是否保证线程安全?
LinkedList 是不同步的,也就是不保证线程安全
三、ArrayList和LinkedList的底层数据结构?
Arraylist 底层使用的是Object数组;LinkedList 底层使用的是双向链表数据结构(JDK1.6之前为循环链表,JDK1.7取消了循环)
四、LinkedList 插入和删除是否受元素位置的影响?
LinkedList 采用链表存储,所以插入,删除元素时间复杂度不受元素位置的影响,时间复杂度是O(1)。
五、LinkedList是否支持快速随机访问?
快速随机访问就是通过元素的序号快速获取元素对象(对应于get(int index)方法)。一般会实现标记接口RandomAccess。LinkedList 不支持高效的随机元素访问,所以也没有实现RandomAccess接口。
六、ArrayList 和 LinkedList的内存空间占用对比。
ArrayList的空间浪费主要体现在在list列表的结尾会预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗比ArrayList更多的空间(因为要存放直接后继和直接前驱以及数据)