Java常用的集合框架以及区别

    今天去一家公司面试时,面试官问了我一个关于常用集合框架的问题,我个人认为我当时是没有回答好的,所以晚上回来时查阅了一些资料,下面是我总结的内容:

    Map接口和Collection接口是所有集合框架的父接口。

    

    HashMap、Hashtable、ConcurrentHashMap的区别

    三者在数据存储层面的机制原理基本一致。

    HashMap不是线程安全的,多线程环境下除了不能保证数据一致性以外,还有可能在rehash阶段引发Entry链表成环,导致死循环,允许null作为key;

    Hashtable使用了synchronized关键字,是线程安全的,能绝对保证数据的一致性,但是性能存在问题,并发线程越多,性能越差,不允许null作为key;

    ConcurrentHashMap也是线程安全的,使用分离锁和volatile等方法,极大地提高了读写性能,同时也能保证在对大多数

情况下的数据一致性,在一个线程向Map中加入Entry的操作没有完全之前,其他线程有可能读不到新加入的Entry。

    

HashMap的底层实现

    在java8之前使用的是数组+链表实现,在java8使用了数组+链表+红黑树实现。


    List和Set的区别

    List:有序的,可以包含重复元素;

    Set:无序的,不可以包含重复元素。


    Map:可以把键(key)映射到值(value)的对象,键不能重复;


ArrayList和LinList的区别:

    ArrayList:底层采用数组存储,一次适合查询,不适合增删;

    LinkList:底层采用双向链表,适合增删,不适合查询。

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值