バイナリ ヒープを使用して PriorityQueue インターフェイスを実装する HeapPriorityQueue クラスを作成しようとしています。Java コレクションの PriorityQueue を使用しない場合。
HeapPriorityQueue クラスは、次のドライバー クラスによって実行されます。
public class HeapPriorityQueueDriver {
public static void main(String[] args) {
PriorityQueue<Integer, String> queue = new HeapPriorityQueue<Integer, String>();
queue.insert(0, "Zero");
queue.insert(10, "Ten");
queue.insert(1, "One");
queue.insert(5, "Five");
queue.insert(3, "Three");
queue.insert(7, "Seven");
queue.insert(9, "Nine");
while(!queue.isEmpty()) {
System.out.println(queue.extractMax());
} // end while
} // end main
}
プログラムの出力は次のようになります。
(1,1) (3,3) (5,5) (7,7) (9,9) (10,10)
これは私が作ってみたクラスです:
HeapPriorityQueue (参照)
public class HeapPriorityQueue<Integer, String> {
/**
* Construct the binary heap.
*/
public HeapPriorityQueue( )
{
currentSize = 0;
array = new Comparable[ DEFAULT_CAPACITY + 1 ];
}
/**
* Construct the binary heap from an array.
* @param items the inital items in the binary heap.
*/
public HeapPriorityQueue( Comparable [ ] K )
{
currentSize = K.length;
array = new Comparable[ K.length + 1 ];
for( int i = 0; i < K.length; i++ )
array[ i + 1 ] = K[ i ];
buildHeap( );
}
/**
* Remove the smallest item from the priority queue.
* @return the smallest item.
* @throws UnderflowException if empty.
*/
public Comparable deleteMin( )
{
Comparable minK = findMin( );
array[ 1 ] = array[ currentSize-- ];
percolateDown( 1 );
return minK;
}
private Comparable findMin() {
// TODO Auto-generated method stub
return null;
}
/**
* Establish heap order property from an arbitrary
* arrangement of items. Runs in linear time.
*/
private void buildHeap( )
{
for( int i = currentSize / 2; i > 0; i-- )
percolateDown( i );
}
/**
* Returns size.
* @return current size.
*/
public int size( )
{
return currentSize;
}
/**
* Make the priority queue logically empty.
*/
public void makeEmpty( )
{
currentSize = 0;
}
private static final int DEFAULT_CAPACITY = 100;
private int currentSize; // Number of elements in heap
private Comparable [ ] array; // The heap array
/**
* Internal method to percolate down in the heap.
* @param hole the index at which the percolate begins.
*/
private void percolateDown( int hole )
{
int child;
Comparable tmp = array[ hole ];
for( ; hole * 2 <= currentSize; hole = child )
{
child = hole * 2;
if( child != currentSize &&
array[ child + 1 ].compareTo( array[ child ] ) < 0 )
child++;
if( array[ child ].compareTo( tmp ) < 0 )
array[ hole ] = array[ child ];
else
break;
}
array[ hole ] = tmp;
}
/**
* Internal method to extend array.
*/
private void doubleArray( )
{
Comparable [ ] newArray;
newArray = new Comparable[ array.length * 2 ];
for( int i = 0; i < array.length; i++ )
newArray[ i ] = array[ i ];
array = newArray;
}
}
コンソールのエラー行: 「スレッド "main" java.lang.Error での例外: 未解決のコンパイルの問題: タイプの不一致: HeapPriorityQueue から PriorityQueue に変換できません
at HeapPriorityQueueDriver.main(HeapPriorityQueueDriver.java:5)"
誰でもこれを解決するのを手伝ってもらえますか?