Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我是否正确地将对象插入堆_Java_Generics_Heap_Comparable - Fatal编程技术网

Java 我是否正确地将对象插入堆

Java 我是否正确地将对象插入堆,java,generics,heap,comparable,Java,Generics,Heap,Comparable,我正在学习使用泛型,在比较对象时遇到了一些问题。我创建了一个generic堆类,这样它就可以接受任何类似的对象。我的问题是,我是否正在添加对象并正确使用泛型,以便可以接受任何类型的可比较对象。具体来说,我不确定是否在我的addNode()方法中正确添加了对象 public class Heap<T extends Comparable<T>> { private ArrayList<T> heap; public Heap(){ heap = new

我正在学习使用泛型,在比较对象时遇到了一些问题。我创建了一个
generic
堆类,这样它就可以接受任何类似的对象。我的问题是,我是否正在添加对象并正确使用
泛型
,以便可以接受任何类型的可比较对象。具体来说,我不确定是否在我的
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);
}
公共类堆{
私有数组列表堆;
公共堆(){
heap=newarraylist();
}
公共int getSize(){
返回heap.size();
}
公共布尔值为空(){
返回heap.isEmpty();
}
公共int getPLoc(int i){
返回(i-1)/2;
}
公共int getLCLoc(int i){
返回2*i+1;
}
公共int GETRLOC(int i){
返回2*i+2;
}
公共T getNodeAt(内部i){
if(heap.get(i)==null){
System.out.println(“项不存在”);
返回null;
}否则{
返回heap.get(i);
}
}
公共void addNode(tn){
heap.add(null);
int index=heap.size()-1;
而(index>0&&(getNodeAt(getPLoc(index)).compareTo(n)<0)){//这是正确的吗?
set(index,getNodeAt(getPLoc(index));
index=getPLoc(index);
}
set(索引,n);
}

override
compareTo
,extend
Comparable
InterfaceLook很好。你问这个问题有什么原因吗?这一切似乎都是假设的。@ErwinBolwidt我问这个问题是因为我不确定这是否是我的对象没有被正确比较的错误的根源。但是,这是另一个问题。override
compareTo
,extend
Comparable
interfacelook很好。你有什么理由问这个问题吗?这一切似乎都是假设的。@ErwinBolwidt我问这个问题是因为我不确定这是否是我在没有正确比较对象的情况下出错的原因。但是,这是另一个问题。