JAVA的集合类及其他们的线程安全、红黑树基本概念

在java.util中,集合一般分为三类Set、List、map。今天就简单描述一下三种集合相关的面试常问问题。

 

1.Set

   HashSet底层实现:底层为HashMap存储 无序性

保持唯一性:首先HashSet会将对象进行哈希再存储,说先会在hashMap里寻找是否有相拥的哈希code,没有则插入,有则使用eqauls()比较存储在同一个桶内的对象是否相同。

   TreeSet底层实现:TreeSet 有序性

  2.list

ArrayList:底层实现数组

Linklist:底层实现链表

3.HshMap:

    底层实现:如果一个hash值上面低于8个则为链表,多于8个则为红黑树

    初始容量 16; 

    负载因子:0.75   

     啥是负载因子:举例:当前容量大于最大容量*0.75,则开始扩容

     为啥是0.75: 太高查询效率过慢,太低空间开销过大

    扩容倍数:2

      为啥是2:hashmap计算key值时,将hash出来的code值将数组大小减1进行与运算,经检验,2的倍数时,key指的碰撞率会降低,从而避免查询链表或者红黑树已达到增大效率。

4.集合安全类:

   1.原始的安全集合类:HashTable、Vector  synchronized修饰的方法,效率非常低

  2.修饰的安全集合方法 例子:Collection.synchronizedMap()方法,返回Map类,  不推荐 效率低 

  3.JUC包中的集合类:

               CopyOnWrite类:修改时通过复制的形式保持的一致性,空间开销较大,常用于读操作较多写操作较少的情况

              ConCurrent类:通过cas(compare and swap)方式优化,达到高效的高并发。 但在多个线程进行同时读取和修改的同时,读取的结果可能会出现偏差,这就是Concurrent集合类的弱一致性。

ps:   

cas表示compare and swap,先比较再替换。

5.红黑树:

       几点特性要记住:1.根节点为黑色。2.父子节点不能同时为红色。3.从任意一个节点出发,到叶子节点经历的黑节点树一样多。

        1.默认插入色为红色。修复违规的代价比较小

        2.修复违规方式:

                 变色、旋转

        3.插入节点时:

                根节点时:自身变为黑色

               父节点为黑色时:直接插入红色节点

              父节点为红色时:要把父节点变为黑色,再插入红节点

              uncle为红色时:染红祖父节点,uncle变为黑色

 

  红黑树优势:的最长路径不大于两倍的最短路径的长度

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值