共同学习Java源代码-数据结构-PriorityQueue类(八)
2018-01-19 21:38
330 查看
private void heapify() {
for (int i = (size >>> 1) - 1; i >= 0; i--)
siftDown(i, (E) queue[i]);
}
这个方法是堆化的方法 我现在才搞明白PriorityQueue的存储方式是用数组存储二叉树 0下标为根节点 2n+1下标为左节点 2n+2下标为右节点 (n-1)/2下标为父节点 n为数组下标值
PriorityQueue是完全二叉树和最小堆 这个方法就是保证堆不变性 就是每个父节点都要小于左右子节点
实现过程就是遍历数组前一半的元素 然后挨个调用siftDown方法
public Comparator<? super E> comparator() {
return comparator;
}
comparator的getter
private void writeObject(java.io.ObjectOutputStream s)
throws java.io.IOException {
s.defaultWriteObject();
s.writeInt(Math.max(2, size + 1));
for (int i = 0; i < size; i++)
s.writeObject(queue[i]);
}
这个是序列化输出的方法
多数步骤都和以前的Collection实现类一样 就是writeInt那块是写出2和size+1的最大值 作为数组长度
private void readObject(java.io.ObjectInputStream s)
throws java.io.IOException, ClassNotFoundException {
s.defaultReadObject();
s.readInt();
queue = new Object[size];
for (int i = 0; i < size; i++)
queue[i] = s.readObject();
heapify();
}
这个是序列化读入的方法 和多数Collection实现类大致相同
就是最后调用heapify方法调整二叉树在数组中的顺序
PriorityQueue讲解完毕 这个类我到了最后才明白大致原理所以之前的讲解可能有误 请见谅
for (int i = (size >>> 1) - 1; i >= 0; i--)
siftDown(i, (E) queue[i]);
}
这个方法是堆化的方法 我现在才搞明白PriorityQueue的存储方式是用数组存储二叉树 0下标为根节点 2n+1下标为左节点 2n+2下标为右节点 (n-1)/2下标为父节点 n为数组下标值
PriorityQueue是完全二叉树和最小堆 这个方法就是保证堆不变性 就是每个父节点都要小于左右子节点
实现过程就是遍历数组前一半的元素 然后挨个调用siftDown方法
public Comparator<? super E> comparator() {
return comparator;
}
comparator的getter
private void writeObject(java.io.ObjectOutputStream s)
throws java.io.IOException {
s.defaultWriteObject();
s.writeInt(Math.max(2, size + 1));
for (int i = 0; i < size; i++)
s.writeObject(queue[i]);
}
这个是序列化输出的方法
多数步骤都和以前的Collection实现类一样 就是writeInt那块是写出2和size+1的最大值 作为数组长度
private void readObject(java.io.ObjectInputStream s)
throws java.io.IOException, ClassNotFoundException {
s.defaultReadObject();
s.readInt();
queue = new Object[size];
for (int i = 0; i < size; i++)
queue[i] = s.readObject();
heapify();
}
这个是序列化读入的方法 和多数Collection实现类大致相同
就是最后调用heapify方法调整二叉树在数组中的顺序
PriorityQueue讲解完毕 这个类我到了最后才明白大致原理所以之前的讲解可能有误 请见谅
相关文章推荐
- 共同学习Java源代码-数据结构-PriorityQueue类(七)
- 共同学习Java源代码-数据结构-PriorityQueue类(六)
- 共同学习Java源代码-数据结构-PriorityQueue类(一)
- 共同学习Java源代码-数据结构-PriorityQueue类(三)
- 共同学习Java源代码-数据结构-PriorityQueue类(五)
- 共同学习Java源代码-数据结构-PriorityQueue类(四)
- 共同学习Java源代码-数据结构-PriorityQueue类(二)
- 共同学习Java源代码--数据结构--LinkedList类(六)
- 共同学习Java源代码--数据结构--AbstractList抽象类(六)
- 共同学习Java源代码--数据结构--AbstractList抽象类(二)
- 共同学习Java源代码--数据结构--ArrayList类(四)
- 共同学习Java源代码--数据结构--List接口
- 共同学习Java源代码--数据结构--LinkedList类(八)
- 共同学习Java源代码--数据结构--ArrayList类(五)
- 共同学习Java源代码--数据结构--LinkedList类(一)
- 共同学习Java源代码--数据结构--ArrayList类(一)
- 共同学习Java源代码--数据结构--AbstractList抽象类(三)
- 共同学习Java源代码--数据结构--开篇语
- 共同学习Java源代码--数据结构--AbstractCollection抽象类(一)
- 共同学习Java源代码--数据结构--AbstractList抽象类(四)