これは、d-aryヒープのremoveメソッドです。コンパイルすると、多くの「変換不可能なタイプ」エラーが発生します。また、私のプログラムは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 Genericsについて高い理解を持っている人は、タイプ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--;
}
}
エラー:型キャスト(整数)時に発生します。必要に応じてすべてのコードを投稿できますが、これで十分だと思います。