java常用集合


    Collection
        List
            ArrayList

                1.实现:底层使用数组
                2.特点:排列有序,可重复、查询快、增删慢。线程不安全    
                3.扩容机制:首次扩容会从0扩容成10,再次扩容会扩容到上一次容量的1.5倍
            LinkedList
                1.实现:底层使用双向链表
                2.特点:列表中的每个节点都包含了对前一个和后一个节点的引用
                3.扩容机制:linkedlist 没有扩容机制,就是一直在前面或者在后面新增就好
            Voctor
                1.实现:底层使用object数组实现
                2.特点:线程安全效率低
                3.扩容机制:当容量不够首次扩容会从0扩容成10,再次扩容会扩容到上一次容量的2倍
        Set
            Hashset

                1.底层:底层实现使用哈希表结构
                2.特点:无序集合存取的顺序不一样,没有索引,不能使用for遍历,只能用foreach
                hashset底层不重复的原理:**Set集合在调用add方法的时候,add方法会调用元素的hashCode方法和equals方法,判断元素是否重复**
            TreeSet
                1.底层:二叉树数据结构
                2.特点:如果添加整型那会从小排到大
如果添加字符串 会从第一个元素比较 在比较第二个元素大小
在自然排序中,比较俩个对象是否为相同的标准 : compareTo()返回0
            LinkedHashSet
                1.底层:哈希表+链表(多了一条链表,记录元素的存储顺序)
                2.特点:元素的有序,是有续 怎么放进去的 怎么取出来 ,但不重复
    Map
        Hashmap

            1.底层:java1.7数组+链表  ,java1.8引入了红黑树
                Hashmap底层是数组+链表+红黑树
​         初始大小:16 必须是2的幂次方
​         加载因子:0.75
​         树化因子:8
​         非树华因子 6
​    扩容过程:当元素放置够12个时,或者单链表够8个时,进行扩容,扩容需要先创建一个新的数组,在通过重新计算Hash值的方式,来判断元素应该在高位还是地位
​    树化过程,当元素单链表超过8个元素,同时
容器的大小不小于64,进行树华,将链表树华成一个红黑树
​        Hashmap:在1.7使用头插法,1.8使用尾插法
​         Hashmap为什么容器大小必须是2的幂 : 方便计算桶的位置,方便rehash
            2.特点:键值对存储,查询效率高、允许出现null,是非线程安全的
            3.HashMap中的put()和get()的实现原理
                **1、map.put(k,v)实现原理**
(1)首先将k,v封装到Node对象当中(节点)。
(2)然后它的底层会调用K的hashCode()方法得出hash值。
(3)通过哈希表函数/哈希算法,将hash值转换成数组的下标,下标位置上如果没有任何元素,就把Node添加到这个位置上。如果说下标对应的位置上有链表。此时,就会拿着k和链表上每个节点的k进行equal。如果所有的equals方法返回都是false,那么这个新的节点将被添加到链表的末尾。如其中有一个equals返回了true,那么这个节点的value将会被覆盖。
**2、map.get(k)实现原理**
(1)先调用k的hashCode()方法得出哈希值,并通过哈希算法转换成数组的下标。
(2)通过上一步哈希算法转换成数组的下标之后,在通过数组下标快速定位到某个位置上。如果这个位置上什么都没有,则返回null。如果这个位置上有单向链表,那么它就会拿着K和单向链表上的每一个节点的K进行equals,如果所有equals方法都返回false,则get方法返回null。如果其中一个节点的K和参数K进行equals返回true,那么此时该节点的value就是我们要找的value了,get方法最终返回这个要找的value。
            ConcurrentHashmap
                底层实现与hashmap一致,但是在涉及多线程操作的时候,引入CAS + Synchrionized关键字,来保证线程安全
​    1.7使用分段锁, 1.8使用 CAS + Synchronized                          

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

熊掌渔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值