我正在学习使用泛型,并且在如何比较我的对象时遇到了一些问题。我创建了一个generic
堆类,因此它可以接受任何类似的对象。我的问题是,如果我正在添加对象并正确使用generics
,以便我可以接受任何类型的可比较对象。具体来说,我不确定我是否在addNode()
方法中正确添加对象。
public class Heap<T extends Comparable<T>> {
private ArrayList<T> heap;
public Heap(){
heap = new ArrayList<T>();
}
public int getSize(){
return heap.size();
}
public boolean isEmpty(){
return heap.isEmpty();
}
public int getPLoc(int i){
return (i - 1) / 2;
}
public int getLCLoc(int i){
return 2 * i + 1;
}
public int getRCLoc(int i){
return 2 * i + 2;
}
public T getNodeAt(int i) {
if(heap.get(i) == null) {
System.out.println("Item does not exist.");
return null;
}else {
return heap.get(i);
}
}
public void addNode(T n) {
heap.add(null);
int index = heap.size() - 1;
while(index > 0 && (getNodeAt(getPLoc(index)).compareTo(n) < 0)) { // Is this correct?
heap.set(index, getNodeAt(getPLoc(index)));
index = getPLoc(index);
}
heap.set(index, n);
}