java数据结构

Map

  • HashMap = 哈希表(数组)+链表/红黑树
原理
hash= hashCode 高低16位异或 (hashCode是int, 4字节32位)
寻址:tab[i = (n - 1) & hash]
default capacity=16 load facotor =0.75 threshold = capacity*factor ;
size>threshold则resize() ,扩容时会重新计算threshold,扩容 后 newCap=oldCap<<1 (乘2)
(续) jdk1.7扩容是重新计算hash;jdk1.8是要看看原来的hash值新增的那个bit是1还是0好了,如果是0则索引没变,如果是1则索引变成"原索引*2
链表>8尝试进化 树<6退化
putVal时先treeifyBin()然后resize() ,treeifyBin()时hash表长度<64时只resize()不树状化。
initialCapacity = (预计数量/load facotor)+1 (加1是规避除法的精度损失而造成的扩容操作)
  • LinkedHashMap = HashMap + 双向链表
  • Hashtable 约= syncronized + 哈希表+链表 没有进退化
  • TreeMap = 红黑树
  • HashSet = HashMap
  • TreeSet = TreeMap

Collection

  • ArrayList = 动态数组 default capacity = 10 扩容大小150%
  • LinkedList = 双向链表
  • Vector= syncronized + ArrayList
  • Stack = Vector .push() .pop() .peek() 查看/偷看栈顶元素
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值