堆排序Java实现

import java.util.Arrays; public class HeapSort { /*** * 下滤调整堆(大顶堆) * 以p为根的数不是大顶堆,但是p节点的左子树和右子树均为大顶堆 * 所以只需将p节点向下交换到合适的位置 ***/ public s...

2018-01-20 16:50:22

阅读数 71

评论数 0

剑-数据流中的中位数

题目描述如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。解法:建立一个大顶堆和一个小顶堆,确保大顶堆的数都比小顶堆小。且大顶堆的数量总是等于小顶堆或者比小顶堆多...

2018-01-18 12:59:10

阅读数 47

评论数 0

剑-二叉树序列化与反序列化(三种解法)

假设有一个二叉树  _30_    /   \      10    20  /     /  \ 50    45  35 解法一:前序遍历二叉树,空节点处插入#。如图 _30_    /   \      10    20  /  \   /  \ 50   # 45  35 /...

2018-01-17 21:12:43

阅读数 166

评论数 0

剑-链表环中的入口节点

题目描述: 一个链表中包含环,请找出该链表的环的入口结点。 1. 判断是否为环形链表:设置一快一慢连个节点,慢的一次走一个节点,快的一次走2各节点。若为环形,则快节点能追赶上慢节点,记此节点为meetNode。 2. 计算环内节点数:meetNode一定在环形内,以它为起点遍历一圈,得到换内...

2018-01-16 20:31:11

阅读数 53

评论数 0

剑-正则表达式匹配(递归 + 动态规划)

题目描述: 请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和&quo...

2018-01-16 15:11:42

阅读数 487

评论数 1

Java并发编程:阻塞队列(Blocking Queues)、线程池(Thread Pools)的原理与代码实现

阻塞队列(Blocking Queues) 当线程尝试从空队列获取元素时会被阻塞,直到其他线程插入元素。当线程尝试向满队列添加元素时会被阻塞,直到其他线程取出元素。 public class BlockingQueue { //用队列结构存储元素 private Queue ...

2018-01-13 17:26:26

阅读数 112

评论数 0

Java并发编程:重入锁(ReentranceLock )、读写锁(ReadWriteLock)代码实现

重入锁: 同一时刻只能有一条线程拥有重入锁,但此线程可以重复获得锁。其余需求获得此锁的线程被阻塞。代码实现关键是记录当前获得锁的线程。 public class ReentranceLock { //记录当前获得锁的线程。 private Thread lockedBy = nul...

2018-01-13 17:03:26

阅读数 819

评论数 0

Java并发内存模型

Java并发内存模型的主要目标是定义程序中各个变量的访问规则,即虚拟机将变量存储到内存和从内存中取出的底层细节。此处的变量指的是实例字段、静态字段和构成数组的对象元素等线程公有的资源。因为只有这些被线程共享,存在竞争问题。如下是内存模型概念图: 主内存 : 所有的变量都存储在主内存中...

2018-01-12 13:17:16

阅读数 72

评论数 0

Java线程状态转换

线程转换图 Thread.sleep(long millis) : 使当前线程阻塞规定的时间,不失去占有的锁。阻塞结束后转入可运行状态。 Thread.yield() : 使当前线程转入可运行状态,不是去占有锁。与sleep相比,不会被阻塞规定时间。 Thread.interrupt...

2018-01-12 12:35:57

阅读数 43

评论数 0

JVM垃圾收集器

主要讨论针对于Java堆的垃圾回收 如何判断对象需要回收 1. 引用计数法 给对象添加一个计数器,每当有一个地方引用它,计数器加1;当引用失效时,计数器减1;任何时刻计数器为0的对象就是不可能在被使用的。 但这种方法很难解决对象之间的相互循环引用问题,如下代码所示: public...

2018-01-11 15:34:26

阅读数 61

评论数 0

Java虚拟机内存区域

1. Java虚拟机包含以下几个运行时数据区域,如下图所示 程序计数器: - 线程私有内存, 可以看作是当前线程所执行的字节码的符号指示器。 - 在虚拟机概念模型里,字节码解释器工作时就是通过这个计数器的值来选取下一条需要执行的字节码指令。 - 此区域在虚拟机规范中没有...

2018-01-11 15:27:39

阅读数 50

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭