Java后台研发-面试攻略-集合类

今天公司面试了一个小伙,工作经验3年,Java开发岗,因为没啥面试官的经验就把自己找工作时候的面试题拎出来问了问,明显感觉小伙准备不足,很多面试宝典常见的问题都答不上来。好记性不如烂笔头,自己也记下来吧万一哪天用得上。那么就以JDK1.8为例进行总结吧。

1. ArrayList和LinkedList的联系和区别

Java后台研发-面试攻略-集合类_第1张图片
ArrayList和LinkedList

联系:

ArrayList与LinkedList都实现了List接口,List接口又继承自Collection接口。两者都不是线程安全的。

区别:

1. 内部实现:ArrayList是基于动态数组的数据结构;LinkedList是基于链表的数据结构

2. 随机访问:ArrayList存取操作时间复杂度为O(1);LinkedList存取需要遍历链表,时间复杂度为O(n)

3. 增删操作:ArrayList增删需要移动数组,时间复杂度为O(n);LinkedList只需要移动指针,时间复杂度为O(1)

深入理解:
深入理解-ArrayList源码解读

2. HashMap和Hashtable的联系和区别

HashMap

public class HashMap extends AbstractMap
    implements Map, Cloneable, Serializable

Hashtable

public class Hashtable
    extends Dictionary
    implements Map, Cloneable, java.io.Serializable

联系:

两者都实现了Map接口

区别:

  1. HashMap是非线程安全的,Hashtable是线程安全的
  2. HashMap继承自AbstractMap类,Hashtable继承自Hashtable类
  3. HashMap是支持null键和null值的,HashTable在遇到null时,会抛出NullPointerException异常
  4. 可以看到HashTable默认的初始大小为11,之后每次扩充为原来的2n+1;HashMap默认的初始化大小为16,之后每次扩充为原来的2倍

3. HashMap和ConcurrentHashMap的联系和区别

HashMap和ConcurrentHashMap的比较是Java面试中频度非常高的问题,个人认为有必要对两者进行深入理解,尤其是ConcurrentHashMap数据结构设计非常巧妙

深入理解-HashMap源码解读
深入理解-ConcurrentHashMap源码解读

联系:

都是键值对数据结构

区别:

  1. 底层实现不同
  2. HashMap是非线程安全的,ConcurrentHashMap是线程安全的
  3. 所在包不同,HashMap在java.util包中,ConcurrentHashMap在java.util.concurrent包中

4. List和Set的联系和区别

List和Set是最常用的集合类,也是面试中的常见问题。List常用的实现类有ArrayList、LinkedList和Vector;Set常用的实现类有HashSet、LinkedHashSet以及TreeSet

Java后台研发-面试攻略-集合类_第2张图片
image.png

联系:

两者都是接口,并且都继承自Collection接口

区别:

  1. List中允许有重复的元素,Set中元素是唯一的。元素是否唯一通过对象的equals判断
  2. List可以通过索引来操作元素,Set不能通过索引
  3. List会按照插入元素的顺序排序,Set不能保证元素顺序

5. HashSet和TreeSet的联系和区别

联系:

两者都是Set接口的实现类

区别:

  1. HashSet中元素是无序的,TreeSet可以自然排序或者自定义排序
  2. 内部实现不同,HashSet底层是哈希表实现的,TreeSet底层是二叉树,是SortedSet的唯一实现类
  3. HashSet可以放入null,TreeSet元素不能为null

6. HashSet和LinkedHashSet

联系:

LinkedHashSet继承自HashSet

区别:

HashSet内部是通过HashMap实现的,LinkedHashSet内部使用的是LinkHashMap。这样做的意义是LinkedHashSet中的元素顺序是可以保证的,也就是说遍历序和插入序是一致的。

HashSet如何保证元素可以参考 深入理解-HashSet源码解读

你可能感兴趣的:(Java后台研发-面试攻略-集合类)