我想在Java中为Heap数据结构创建一个类,允许用户选择MinHeap或MaxHeap
构造函数应该如下所示:
public Heap(String type) {
if (type.equals("min")) {
//allow this object only to use methods for MinHeap
} else {
//allow this object only to use methods for MaxHeap
}
}
请注意,这两种方法的方法确实不同。例如,此方法在MaxHeaps中使用,并且在MinHeap中不会以相同的方式实现:
public void maxHeapify(int i, int n) {
int l = leftPos(i);
int r = rightPos(i);
int largest;
if (l < n && heap.get(l) > heap.get(i)) {
largest = l;
} else {
largest = i;
}
if (r < n && heap.get(r) > heap.get(largest)) {
largest = r;
}
if (largest != i) {
swap(i, largest);
maxHeapify(largest, n);
}
}
我使用数组来表示MaxHeap。
有可能吗?或者我应该为MaxHeap和MinHeap创建单独的类;各有其具体方法?或者你认为我应该这样:例如:
public void getMax() {
if (type.equals("min")) {
//use the method for MinHeap
} else {
//apply the method for MaxHeap
}
}
随意更改问题的标题因为我不知道究竟如何问题
答案 0 :(得分:5)
您应该有一个Heap
界面,其中包含两个实施类 - MinHeap
和MaxHeap
。这就是Collections API的设计方式。例如,List
接口有许多实现,其中一些包括LinkedList
和ArrayList
。
答案 1 :(得分:2)
您可以使用与java.util.PriorityQueue
实现方式类似的单个类来实现它。您可以通过传递适当的比较器类来切换优先级。
这类似于Javadocs中描述的构造函数PriorityQueue(int initialCapacity, Comparator<? super E> comparator)
:
创建具有指定初始容量的PriorityQueue,该容量根据指定的比较器对其元素进行排序。