Java 泛型、不可转换类型、类型转换、堆 d-ary

发布于 2024-12-02 03:54:38 字数 1039 浏览 1 评论 0原文

这是我的 d 进制堆的删除方法。编译时出现很多“不可转换类型”错误。另请注意,我的程序扩展了 Comparable。

public class HeapImpl12<T extends Comparable<? super T>> implements Heap12<T>

我知道我的数组不是类型对象而是 T 类型。

T[] _nodeArray = (T[]) new Comparable[DEFAULT_ARRAYSIZE]; 

问题:我知道一切都应该是 T 类型,但是当我编写代码时,我遇到了很多“无法将 T 类型转换为 INT 类型”的错误,所以我决定进行类型转换以使其类型相同(T)或(整数)。我现在意识到这样做是错误的,因为我收到“不可转换类型”错误。对 Java 泛型有深入了解的人请告诉我保留 T 类型的所有内容的技术和技巧。

public void remove(T o) {
    for(int i = 0; i < _nodeArray.length; i++){
        if(_nodeArray[i].equals(o)){
            _nodeArray[i] = _nodeArray[_numNodes - 1];
            if((Integer)_nodeArray[i] > parentIdx(i)){
                bubbleUp((Integer)_nodeArray[i]);
            }
            else{
                trickleDown((Integer)_nodeArray[i]);
            }

        }
        else{
            throw new NoSuchElementException();
        }


        _numNodes--;
    }

}

错误:当我进行类型转换(整数)时发生。如果您愿意,我可以发布我的所有代码,但我认为这已经足够了。

This is my remove method for d-ary heaps. I'm getting a lot of 'inconvertible type' error when i compile. Also note that my program extends Comparable.

public class HeapImpl12<T extends Comparable<? super T>> implements Heap12<T>

I know my array is not type object but type T.

T[] _nodeArray = (T[]) new Comparable[DEFAULT_ARRAYSIZE]; 

Question: I understand everything should be type T, but when I was writing my code I got a lot of errors of "CAN'T CONVERT TYPE T TO TYPE INT", so i decided to typecast to make it same type (T) or (Integer). I realize now that doing this was wrong since I get "inconvertible type" error. Someone who has a high understanding on Java Generics please tell me techniques and tips to keep everything of type T.

public void remove(T o) {
    for(int i = 0; i < _nodeArray.length; i++){
        if(_nodeArray[i].equals(o)){
            _nodeArray[i] = _nodeArray[_numNodes - 1];
            if((Integer)_nodeArray[i] > parentIdx(i)){
                bubbleUp((Integer)_nodeArray[i]);
            }
            else{
                trickleDown((Integer)_nodeArray[i]);
            }

        }
        else{
            throw new NoSuchElementException();
        }


        _numNodes--;
    }

}

errors: happen when i typecast (Integer). I can post all of my code if you want me to but i think this is enough.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

无言温柔 2024-12-09 03:54:38

您实际上不需要做太多事情——实际上就这样了。只需取出显式转换并在 > 上使用 compareTo 即可:

public void remove(T o) {
    for(int i = 0; i < _nodeArray.length; i++){
        if(_nodeArray[i].equals(o)){
            _nodeArray[i] = _nodeArray[_numNodes - 1];
            if(_nodeArray[i].compareTo(parentIdx(i)) > 0){
                bubbleUp(_nodeArray[i]);
            }
            else{
                trickleDown(_nodeArray[i]);
            }

        }
        else{
            throw new NoSuchElementException();
        }


        _numNodes--;
    }
}

You really don't have to do much -- it's practically right as it is. Just take out the explicit casts and use compareTo in place on >:

public void remove(T o) {
    for(int i = 0; i < _nodeArray.length; i++){
        if(_nodeArray[i].equals(o)){
            _nodeArray[i] = _nodeArray[_numNodes - 1];
            if(_nodeArray[i].compareTo(parentIdx(i)) > 0){
                bubbleUp(_nodeArray[i]);
            }
            else{
                trickleDown(_nodeArray[i]);
            }

        }
        else{
            throw new NoSuchElementException();
        }


        _numNodes--;
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文