美文网首页
Java后台研发-面试攻略-集合类

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

作者: 梧可奈何 | 来源:发表于2018-06-23 16:44 被阅读340次

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

    1. ArrayList和LinkedList的联系和区别

    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<K,V> extends AbstractMap<K,V>
        implements Map<K,V>, Cloneable, Serializable
    

    Hashtable

    public class Hashtable<K,V>
        extends Dictionary<K,V>
        implements Map<K,V>, 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

    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后台研发-面试攻略-集合类

          本文链接:https://www.haomeiwen.com/subject/tpfdyftx.html