集合的数据结构解析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36720650/article/details/88667619

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实现。

    

猜你喜欢

转载自blog.csdn.net/qq_36720650/article/details/88667619