ARTS 打卡计划 _ 第一周
Algorithm(LeetCode 算法题练习和学习)
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
Review(英文技术文章点评)
The Product-Minded Software Engineer 这篇文章来自极客时间的新专栏《互联网人的英语私教课》,主要是介绍了产品经理需要怎样的特质。
产品经理需要向工程师准确地传达公司的战略意图、产品的核心价值、设计背后的需求逻辑等,工程师则需要具备所谓的“技术思维”或“工程思维”,从技术实现的角度去考虑系统架构、开发成本等问题。一个优秀的产品经理除了懂客户、懂商业,还需要懂技术,在和工程师互动的过程中,要不断深入了解“工程思维”,并将“产品思维”或者“用户思维”与“工程思维”结合起来,这往往是很多公司招聘产品经理的基本条件之一。
Tip(总结和归纳本周学习的知识点)
关于 HashMap 的一些总结
HashMap 的实现原理
HashMap 的主干是一个 Entry 数组。Entry 是 HashMap 的基本组成单元,没一个 Entry 包含一个 key-value 键值对,Map 其实就是保存了两个对象之间的映射关系的一种集合。HashMap 由数组+链表组成,数组是 HashMap 的主体,链表是为了解决哈希冲突而存在的,如果定位到数组位置不含链表,那么查找、添加等操作很快,仅需要一次寻址即可。如果定位到的数组包含链表,对于添加操作其时间复杂度为 O(n),因为要先遍历链表,存在则覆盖,否则新增;对于查找操作来讲,仍需遍历链表,然后通过 key 对象的 equals 方法逐一比对查找。所以,从性能考虑 HashMap 中的链表越少,性能才会越好。
Hash Table 的复杂度分析(平均情况)
插入、查询和删除都是 O(1)的时间复杂度。
HashMap 的 put()与 get()
put 之前,先计算 key 的 hashCode,hashCode 是个 int 类型的值,计算出来的 hashCode 就是数据在这个数组中的索引。所以,在 get 的时候,也是先计算 key 的 hashCode,然后通过 hashCode 直接从数组中取出值即可。如果存在不同 key 的 hashCode 相同,那么这些 hashCode 相同的值就被存放在一个链表上,查找的时候就遍历这个链表,这就会造成性能下降,所以需要设计一个好的散列函数。
Share(分享一篇有价值的文章)
https://www.youtube.com/watch?v=Hd_ptbiPoXM
乔布斯在斯坦福大学毕业典礼演讲。虽然不是文章,但我个人觉得非常值得分享。Stay hungry, stay foolish.
评论