public class HeapImpl {
private int CAPACITY = 10;
private int size = 0;
private int[] data; public HeapImpl() {
data = new int[CAPACITY];
} //some helper methods
private int getLeftChildIndex(int index) {
return index * 2 + 1;
} private int getRightChildIndex(int index) {
return index * 2 + 2;
} private int getParentIndex(int index) {
return (index - 1) / 2;
} private boolean hasLeftChild(int index) {
return getLeftChildIndex(index) < size;
} private boolean hasRightChild(int index) {
return getRightChildIndex(index) < size;
} private boolean hasParent(int index) {
return getParentIndex(index) >= 0;
} private void ensureCapacity() {
if (size == CAPACITY) {
data = Arrays.copyOf(data, CAPACITY * 2);
CAPACITY = CAPACITY * 2;
}
} private void swap(int index1, int index2) {
int temp = data[index1];
data[index1] = data[index2];
data[index2] = temp;
} public int poll() {
if (size == 0) {
throw new IllegalStateException();
}
int item = data[0];
data[0] = data[size - 1];
heapifyDown();
return item;
} private void heapifyDown() {
int index = 0;
while (hasLeftChild(index)) {
int smallest = getLeftChildIndex(index);
if (hasRightChild(index) && data[getRightChildIndex(index)] < data[smallest]) {
smallest = getRightChildIndex(index);
}
if (data[index] < data[smallest]) {
break;
} else {
swap(smallest, index);
index = smallest;
}
}
} public void add(int item) {
ensureCapacity();
data[size++] = item;
heapifyUp();
} private void heapifyUp() {
int index = size - 1;
while (hasParent(index) && data[getParentIndex(index)] > data[index]) {
swap(index, getParentIndex(index));
index = getParentIndex(index);
}
}
// public static void main(String [] args){
// HeapImpl heap = new HeapImpl();
// heap.add(2);
// heap.add(4);
// heap.add(5);
// heap.add(0);
// heap.add(9);
// heap.add(100);
// heap.add(15);
// System.out.println(heap.poll());
// System.out.println(heap.poll());
// System.out.println(heap.poll());
// System.out.println(heap.poll());
//
// }
}

Implement heap using Java的更多相关文章

  1. Google 面试题:Java实现用最大堆和最小堆查找中位数 Find median with min heap and max heap in Java

    Google面试题 股市上一个股票的价格从开市开始是不停的变化的,需要开发一个系统,给定一个股票,它能实时显示从开市到当前时间的这个股票的价格的中位数(中值). SOLUTION 1: 1.维持两个h ...

  2. Stack & Heap in Java

    Stack and Heap 都是Java用来在RAM中存放数据的地方.Java自动管理堆和栈,用户不能直接的设置堆或栈. Stack:存在于栈中的数据,其大小与生存周期是确定的,栈中的数据可以共享 ...

  3. javadataAbout stack and heap in JAVA(2)

    改章节个人在上海喝咖啡的时候突然想到的...近期就有想写几篇关于javadata的笔记,所以回家到之后就奋笔疾书的写出来发表了 The stack is much faster than the he ...

  4. Exception in thread "main" java.lang.OutOfMemoryError: Java heap space(Java堆空间内存溢出)解决方法

    http://hi.baidu.com/619195553dream/blog/item/be9f12adc1b5a3e71f17a2e9.html问题描述Exception in thread &q ...

  5. Implement strStr() leetcode java

    题目: Implement strStr(). Returns a pointer to the first occurrence of needle in haystack, or null if ...

  6. 认识Java Core和Heap Dump

    什么是Java Core和Heap Dump Java程序运行时,有时会产生Java Core及Heap Dump文件,它一般发生于Java程序遇到致命问题的情况下. 发生致命问题后,Java进程有时 ...

  7. Java heap dump触发和分析(转)

    为了分析java应用的内存泄漏,使用thread dump往往解决不了问题.使用jstat[eg:jstat-gcutil pid 1000 5]工具查看运行的java应用的heap size,per ...

  8. 关于java.lang.OutOfMemoryError: Java heap space的错误分析

    今天无意间遇到这个错误:java.lang.OutOfMemoryError: Java heap space 问题出现原因:使用a标签实现快速下载[当然已经实现了,但想了想还是要归纳解决这类问题] ...

  9. java.lang.OutOfMemoryError: Java heap space错误及处理办法(收集整理、转)

    下面是从网上找到的关于堆空间溢出的错误解决的方法: java.lang.OutOfMemoryError: Java heap space ============================== ...

随机推荐

  1. Codeforces Round #483 (Div. 2)

    题目链接: https://cn.vjudge.net/contest/229761 A题: n个数字,两个人轮流去数字,直到剩下最后一个数字为止,第一个人希望剩下的数字最小,第二个人希望数字最大,最 ...

  2. 代码方式设置WordPress内所有URL链接都在新标签页打开

    本文由荒原之梦原创,原文链接:http://zhaokaifeng.com/?p=699 前言: WordPress默认情况下几乎所有URL链接都是在同一个标签页打开.这样的话,读者点击一个链接就会离 ...

  3. 聊聊 Spring Boot 2.x 那些事儿

    本文目录: 即将的 Spring 2.0 - Spring 2.0 是什么 - 开发环境和 IDE - 使用 Spring Initializr 快速入门 Starter 组件 - Web:REST ...

  4. Heroku创始人Adam Wiggins发布十二要素应用宣言

    Heroku是业内知名的云应用平台,从对外提供服务以来,他们已经有上百万应用的托管和运营经验.前不久,创始人Adam Wiggins根据这些经验,发布了一个“十二要素应用宣言(The Twelve-F ...

  5. springMVC简单的一些操作

    SpringMVC的模型-视图-控制器(MVC)框架是围绕一个DispatcherServlet来设计的,这个Servlet会把请求分发给各个处理器进行处理,由DispatcherServlet来统一 ...

  6. kafka 三个配置文件

    kafka的配置分为 broker.producter.consumer三个不同的配置 一 BROKER 的全局配置   最为核心的三个配置 broker.id.log.dir.zookeeper.c ...

  7. Java Script 学习笔记 (一) 基础

    1. 设置变量 const: 赋常量,不可更改. let :设置可更改变量. ES6 中推荐使用let 而不是var. Let 和var的区别 : let 将变量的作用域限定在当前{}中, var 定 ...

  8. Oracle的nvl

    在Oracle中nvl(字段名,value)函数用于对没有值的字段做处理在MySql中ifnull(字段名,value)是一样的功能

  9. JUC中Lock和ReentrantLock介绍及源码解析

    Lock框架是jdk1.5新增的,作用和synchronized的作用一样,所以学习的时候可以和synchronized做对比.在这里先和synchronized做一下简单对比,然后分析下Lock接口 ...

  10. BZOJ_3238_[Ahoi2013]差异_后缀自动机

    BZOJ_3238_[Ahoi2013]差异_后缀自动机 Description Input 一行,一个字符串S Output 一行,一个整数,表示所求值 Sample Input cacao Sam ...