集合的数据结构解析

Map接口:存储“键-值”对的数据 ----相当于高中的“函数y = f(x)” (x1,y1) (x2,y2)

>key是不可重复的,使用Set存,value可以重复的,使用Collection来存放的,一个key-value对构成一个entry(Map.Entry),entry使用Set来存放。

map结构梳理:

  map--hashMap:底层结构是数组+链表的形式(它先将key进行hash算法获取到数组的下标位置,然后将数据存放,如果该位置有数据就添加一个链表,存放新加入的数据放在链头,当链表足够长时,就形成了红黑树)。可以添加null键。

      --linkedHashMap:底层机构是hash表和链表;其hash表的用法和hashMap一样,他会调用父类的构造方法,只是重写了父类的addEntry和createEntry方法,记录了前后元素的索引,形成链表。可以添加null键。

    --treeMap:底层结构是红黑树(自平衡二叉树,是一种数据结构,利用数据的操作),它的key需要自己排序(自然排序,定制排序)。不可以添加null键。

    --hashTable:它的底层结构和hashMap一样,只不过它是线程安全的。不允许有null键的发生。

    --AbstractMap:

     --currentHashMap:它的特点是可以异步进行查询和更改操作,因为它的底层实现采用了分段锁,将hash表的每个段都采用了不同的锁,而每个段都是一个hashtable。不可以添加null键。

collection结构梳理:

  list--arraylist:底层结构是数组,查询快,增删慢,扩容时是将老数组中的数据复制到新数组中。线程不安全,并发采用的是快速失败方式。

    --LinkedList:底层结构是双向链表,查询慢,增删快。线程不安全,并发采用的是快速失败方式。

    --Vector(古老的实现类、线程安全的,但效率要低于ArrayList)底层结构是数组,查询快,增删慢,扩容时是将老数组中的数据复制到新数组中。

    set--hashSet: 底层结构是hash表,它的底层代码主要是依赖hashmap来实现的,它的api也是根据hashmap进行封装的。

     --linkedHashSet:底层结构是双向链表和hash表,它是hashset的子类,实现方式主要依赖与linkedhashmap。

    --treeSet: 底层结构是红黑树,根据treemap实现。

 

    

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值