摘要: ##引入 在Java中实现并发很多时候我们都是使用synchronized关键字,自从jdk1.6对synchronized进行重大优化后,其性能问题得到了改善,与ReentrankLock相比性能方面相差无几 性能的改善得益于偏向锁、轻量级锁的引入,它们具体的实现方式可参考《Java并发编程的艺术 阅读全文
posted @ 2020-08-09 14:36 codespoon 阅读(1658) 评论(0) 推荐(1) 编辑
摘要: 举个例子,把代码过程看作去一个目标地点,普通代码调用呢就是事先知道经纬度,然后你坐直升机直接就到了;而通过反射呢就像不知道具体的地点,只知道先去一个地点,然后前往下一个地点,一步步到达目标。这两种方法殊途同归,反射因为要“寻路”,所以会慢一些,但在找到目标地点后和直接调用是一样的。 有时候我们需要在 阅读全文
posted @ 2020-07-14 16:00 codespoon 阅读(197) 评论(0) 推荐(0) 编辑
摘要: ##封装:将数据和行为组合成一个对象,并向对象的使用者隐藏实现细节 类的细节 一个对象变量并没有实际包含一个对象,Java中任何对象变量的值都是对存储在另外一个地方的一个对象的引用,new操作符的返回值也是一个引用 如果需要返回一个可变数据域的拷贝,就应该使用clone() 局部变量不会自动初始化为 阅读全文
posted @ 2020-07-13 15:19 codespoon 阅读(174) 评论(0) 推荐(0) 编辑
摘要: ##堆 一个完全二叉树 堆中每个节点的值都必须大于等于(或小于等于)其子树中每个节点的值 插入O(logn) 将新的元素放到堆的最后 堆化O(logn):顺着节点所在路径,向上逐个对比,然后交换 删除堆顶元素O(logn) 删除堆顶元素 将最后一个节点放到堆顶 从上到下堆化(左子树优先) ##堆排序 阅读全文
posted @ 2020-07-08 12:59 codespoon 阅读(260) 评论(0) 推荐(0) 编辑
摘要: ##树的相关概念 父节点、子节点、兄弟节点 没有父节点的节点叫根节点,没有子节点的节点叫叶节点 节点的高度:节点到叶子节点的最长路径(边数)(从下往上,根节点高度为0) 节点的深度:根节点到这个节点所经历的边数(从上往下,根节点的深度为0) 节点的层数:节点的深度+1(类比楼房层数,地面是一楼) 树 阅读全文
posted @ 2020-07-08 12:47 codespoon 阅读(176) 评论(0) 推荐(0) 编辑
摘要: 哈希算法:将任意长的二进制值串映射为固定长的二进制值串 哈希算法需满足以下几点 从哈希值不能反向推导出原始数据(所以哈希算法也叫单向哈希算法) 对输入数据非常敏感,哪怕原始数据只修改了一个 Bit,最后得到的哈希值也大不相同 散列冲突的概率要很小,对于不同的原始数据,哈希值相同的概率非常小 哈希算法 阅读全文
posted @ 2020-07-06 17:01 codespoon 阅读(182) 评论(0) 推荐(0) 编辑
摘要: 散列表利用数组支持按下标随机访问的时候,时间复杂度为O(1)的特性, 存储时通过散列函数把键值转化为下标,将数据存储在数组中对应下标的位置 查询时也同样利用散列函数计算出下标,取出数据 散列表三个关键 散列函数:hash值尽可能分布均匀,同时不能太复杂影响效率 装载因子:根据响应时间是否敏感控制大小 阅读全文
posted @ 2020-07-06 11:20 codespoon 阅读(917) 评论(0) 推荐(1) 编辑
摘要: 跳表基于单链表实现,链表查找、插入、删除绝大部分时间花在遍历链表上,跳表使用索引来优化链表遍历的过程,使得跳表具有非常优秀的查找、插入、删除性能,并且是天然的动态数据结构 查找、插入、删除时间复杂度都是O(logn) 跳表原理的理解 二叉搜索通过计算mid的值,使得每一次要遍历的数据量减半,那么链表 阅读全文
posted @ 2020-07-05 17:21 codespoon 阅读(584) 评论(0) 推荐(2) 编辑
摘要: 排序算法总结 如何实现一个通用的排序算法 要知道时间复杂度只是描述一个增长趋势,复杂度为O(n**2)的排序算法执行时间不一定比复杂度为O(nlongn)长,因为在计算O时省略了系数、常数、低阶。实际上,在对小规模数据进行排序时,n**2的值实际比 knlogn+c还要小。 可优化的点 小数据规模时 阅读全文
posted @ 2020-07-04 14:26 codespoon 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 归并排序 特点 非原地,空间复杂度O(n) 稳定 O(nlogn) 归并排序的思想是如果要排序一个数组,我们先把数组从中间分为前后两部分,然后对前后部分分别排序,再将排好序的两部分合在一起,这样整个数组就都有序了 快速排序 特点 原地 不稳定 O(nlongn) 选择一个分区点pivot,把它放到正 阅读全文
posted @ 2020-07-04 13:40 codespoon 阅读(146) 评论(0) 推荐(0) 编辑