HashMap,TreeMap,TreeSet

2020-05-23  本文已影响0人  啊啊啊哼哼哼

HashMap

哈希桶+链表+数据结构(红黑树,Java8以后)
O(1)的平均插入,查找,删除时间复杂度
致命缺陷是hash碰撞
哈希算法:先计算hashCode,再映射到索引

默认初始容量为16
负载因子为0.75

为什么初始容量必须为2的幂,并且扩充也是乘以2:
1、减1之后全为1,方便将哈希值映射为桶的编号(hash & size-1);
2、方便扩充,扩充*2,保证通量仍为2的幂,使得扩充后的数据还在原来位置或者在原来的位置加旧桶的的大小。

简单记录一下红黑树,红黑树是一颗自平衡二叉查找树,也就是说当插入或者删除一个节点破坏了树的平衡时,会采用左旋或者右旋自动恢复平衡。红黑树的左子树的值小于根节点,右子树的值大于根节点。红黑树的插入查找删除时间复杂度均为O(log n)。

LinkedHashMap是在HashTable的基础上,加入了一些指针,使得entry按照插入顺序排序。可以用于实现LRU缓存机制。

TreeMap底层是红黑树,可以在创建一个TreeMap时传入一个comparator,自定义排序。

TreeMap<Integer, String> map = new TreeMap<>(Comparator.reverseOrder());
map.put(3, "val");
map.put(2, "val");
map.put(1, "val");
map.put(5, "val");
map.put(4, "val");
System.out.println(map); // {5=val, 4=val, 3=val, 2=val, 1=val}

TreeSet是基于TreeMap实现的


TreeSet.png
上一篇 下一篇

猜你喜欢

热点阅读