Java 加锁与解锁

2020-04-02
阅读 2 分钟
2k
Mark Word用于存储对象自身的运行时数据,自身运行时的数据:哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程 ID、偏向时间戳等,它是实现轻量级锁和偏向锁的关键。

Java String intern() 解析

2020-03-30
阅读 2 分钟
1.7k
String 在 java 中是一个使用最频繁的类,也是占据内存最大的类,合理的优化 String 对象,可以节省宝贵的内存资源。 String#intern() 在每次赋值的时候使用,如果常量池中有相同值,就会重复使用该对象,返回对象引用,这样一开始的对象就可以被回收掉。 例子 上一段代码 {代码...} 结果是: {代码...} 解析 理解这一块...

算法-下一个更大元素 I-LeetCode.496

2020-01-04
阅读 4 分钟
1.5k
给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。找到 nums1 中每个元素在 nums2 中的下一个比其大的值。nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出-1。

算法-最小栈-LeetCode155

2020-01-04
阅读 3 分钟
1.1k
push(x) -- 将元素 x 推入栈中。pop() -- 删除栈顶的元素。top() -- 获取栈顶元素。getMin() -- 检索栈中的最小元素。

算法-链表的中间结点

2020-01-02
阅读 2 分钟
1.3k
链表的操作基本上都是可以套用快慢指针的思路 这道题也是,找中间节点就让慢指针一次走一格,快指针一次走两格,快指针走到头也就意味寻址结束,这时判断一下链表的基数偶数就行

算法-删除链表的倒数第N个节点

2019-12-28
阅读 2 分钟
1.5k
思路 双指针,快指针先走n次,保持快慢指针直接的间距是n然后快慢指针同时后移,快指针为null时,满指针后一个就是要删除的节点。 关键点 哨兵节点,减少特殊节点的判断 代码 Node 逻辑 {代码...} 结果 {代码...}

算法-单链存储的字符串判断回文

2019-12-22
阅读 4 分钟
1.3k
快慢指针慢指(s)针一次走一格,快指针(f)一次走2格,当f 存在子节点与孙子节点时循环执行。 例如:1 2 3 3 2 1起始时 s 与 f 均指向1 第一次循环结束 s 指向 2,f 指向 3第二次循环结束 s 指向 3,f 指向 2f 有子节点没有孙子节点,退出循环这时,如果字符串长度是单数则s 节点就是中间节点;如果偶数则s 节点与s 节...

算法-使用数组实现LRU

2019-12-18
阅读 2 分钟
3.6k
思路 每次放值时先判断是否在已经在缓存中 如果是,将它左边的元素全部右移一个,然后放置在数组头中,同时更新map中角标 如果不是,判断数组是否还有空间 有空间,将全部元素右移,然后放置在数组头中,同时更新map中角标 如果没有,将角标0到数组长度-1的元素右移,然后放置在数组头中,同时更新map中角标,并在map中...

算法-使用有序单链表完成LRU

2019-12-18
阅读 3 分钟
951
为什么要先定位到目标缓存的父节点? 因为涉及到删除操作时,是将要删除的节点的子节点指向要删除节点的子节点,如果没有先找到父节点的话,是无法删除成功的,除非再来一次遍历,增加了时间复杂度。