[leetcode学习日志day3]JAVA HashMap与HashSet详解/红黑树/i++和++i在for 和while中区别

HashMap
HashMap本质就是数据结构上学的链地址法(参考第十四周PPT)
1.loadFactor
  loadFactor是map的负载因子,loadFactor <= 0 || Float.isNaN(loadFactor),表明负载因子要大于0,且是非无穷大的数字
 为什么负载因子默认值为0.75
   0.75在权衡了 负载因子过小而导致哈希碰撞带来的时间影响和 负载因子过大带来的空间浪费后权衡的结果,并且0.75乘上 容量后为整数
https://blog.csdn.net/QL753123/article/details/105920297
2.initialCapacity
  initialCapacity即为容量(可以理解为数组部分)
并且初始值为 16
hash运算的过程其实就是对目标元素的Key进行hashcode,再对Map的容量进行取模,而JDK 的工程师为了提升取模的效率,使用位运算代替了取模运算,这就要求Map的容量一定得是2的幂。

而作为默认容量,太大和太小都不合适,所以16就作为一个比较合适的经验值被采用了。为了保证任何情况下Map的容量都是2的幂,HashMap在两个地方都做了限制。
https://zhuanlan.zhihu.com/p/96130070
3.JDK 1.8前后区别
PUT时,
JDK1.8前未使用红黑树,从头部插入(也就是说数组中存储的是最后插入的元素)
JDK1.8后加入了红黑树,从尾部插入
https://blog.csdn.net/tc_1337/article/details/81700672
HashMap
链接

红黑树
红黑树漫画版

判断重复字符

在上面的流程中,我们还需要使用一种数据结构来判断 是否有重复的字符,常用的数据结构为哈希集合(即 C++ 中的 std::unordered_set,Java 中的 HashSet,Python 中的 set, JavaScript 中的 Set)。在左指针向右移动的时候,我们从哈希集合中移除一个字符,在右指针向右移动的时候,我们往哈希集合中添加一个字符。

i++和++i在for 和while中区别
在for 和while i++ 和 ++i 的作用是一样的。
Java中i++语句是需要一个临时变量取存储返回自增前的值,而++i不需要。这样就导致使用i++时系统需要先申请一段内存空间,然后将值赛如进去,最后不用了才去释放。多了这么一系列操作时间当然多了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值