我是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);
}
}
答案 0 :(得分:3)
我建议您修改E
的类型以指定它必须是Comparable
class Heap<E extends Comparable<E>>
然后您可以比较两个实例a
和b
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);
}
}