在Java中切换类?

时间:2014-12-25 20:50:21

标签: java

我想在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
      }
 }

随意更改问题的标题因为我不知道究竟如何问题

2 个答案:

答案 0 :(得分:5)

您应该有一个Heap界面,其中包含两个实施类 - MinHeapMaxHeap。这就是Collections API的设计方式。例如,List接口有许多实现,其中一些包括LinkedListArrayList

答案 1 :(得分:2)

您可以使用与java.util.PriorityQueue实现方式类似的单个类来实现它。您可以通过传递适当的比较器类来切换优先级。

这类似于Javadocs中描述的构造函数PriorityQueue(int initialCapacity, Comparator<? super E> comparator)

  

创建具有指定初始容量的PriorityQueue,该容量根据指定的比较器对其元素进行排序。