Java:通用类比较方法

时间:2014-12-22 02:49:32

标签: java generics comparison

我是Java新手。基本上,我创建了自己的通用Heap数据结构,它将接受任何类型的对象。 Heap数据结构包含一个比较2个对象的方法:heap[ parent(i)] <= heap[i]。显然,这会导致错误,因为我无法使用<=来比较两个对象。

问题1:我需要编写一个方法来替换<=,这样如果我传入任何两个对象,它将自动执行相当于<=的比较。但我不知道该怎么做。

class Heap<E>{
      E[] heap;
      // constructor
      public Heap(E[] heap){
          this.heap = heap;
      }

      public int parent(int i){
          return  (int) Math.floor(i/2.0);
      }   
      ...

      // This is where the problem occurs    
      public boolean minHeapProperty(){
          for(int i = 0; i < heap.length; i++){
             // <= operator need to be replaced by a method can be used for comparison by all objects
             if( !( heap[ parent(i) ] <= heap[i] )){
                 return false;
             }
          }
          return true;
       }

    ........
}

问题2:我有另一个对象类Vertex,我正在尝试编写一个方法,用实例变量Vertex比较2 node个对象。但我一直都失败了。 请注意,稍后我将创建一堆Vertex个对象。所以,我真的只需要一个可以在Heap泛型类和Vertex类中使用的唯一比较方法。这就是为什么两个问题是相关的,我不想在本网站上发布两个单独的问题。

  Vertex{
     public int node;

     public Vertex(int node){
        this.node = node;
     }

     // compare two vertex objects (I do not know how to write this in the right way)
     public boolean compareTwoVertexObjects(Vertex v2){
         // need an answer here. 
         return (node <= v2.node);    
     }
  }

1 个答案:

答案 0 :(得分:3)

我建议您修改E的类型以指定它必须是Comparable

class Heap<E extends Comparable<E>>

然后您可以比较两个实例ab

E a;
E b;
// ...
int c = a.compareTo(b);
if (c < 0) {
  // a < b
} else if (c > 0) {
  // a > b
} else {
  // a == b
}

然后,您可以使用类似

的内容修改Vertex也为Comparable
class Vertex implements Comparable<Vertex> {
    public int node;

    public Vertex(int node) {
        this.node = node;
    }

    @Override
    public int compareTo(Vertex o) {
        return Integer.valueOf(node).compareTo(o.node);
    }
}