创建了相同的程序,其中一个使用泛型和其他整数,但泛型一个不起作用

时间:2016-09-13 00:26:02

标签: java arrays sorting generics

我正在为类创建一个程序,它比我老师的实现更快地对2D数组进行排序。

我决定将数据放入BST,然后删除每个最小元素并将其放入新的排序数组中。但是,我一直遇到麻烦所以我用int而不是T写它,当我这样做时程序工作了!

但是,现在我将它转换为使用泛型类型T,它不再正确排序。下面的课程是我写的,并继承了我老师的HybridSort类的方法sort(T [] [] input)。

我相信我的问题在于我处理泛型类型T的方式并将其视为int(我使用x.compareTo(y)因此我不相信这是问题)。如果有必要,我也可以使用int发布我编写的代码。谢谢!

public class ***<T extends Comparable<T>> implements HybridSort<T> {

public class BST {
    public T value;
    public BST left;
    public BST right;
    public BST root;

    public BST() {
        this.value = null;
        this.left = null;
        this.right = null;
    }

    public BST(T value, BST left, BST right) {
        this.value = value;
        this.left = left;
        this.right = right;
    }

    public void insert(T value) {
        root = insert(root, new BST(value, null, null));
        this.value = root.value;
        this.left = root.left;
        this.right = root.right;
    }

    public BST insert(BST parent, BST newIndex) {
        if (parent == null) return newIndex;
        else if (newIndex.value.compareTo(parent.value) != 1) parent.left = insert(parent.left, newIndex);
        else if (newIndex.value.compareTo(parent.value) > 0) parent.right = insert(parent.right, newIndex);
        return parent;
    }

    public T removeMin() {
        BST current = root;
        BST parent = root;

        while (current.left != null) {
            parent = current;
            current = current.left;
        }
        parent.left = current.left;

        return current.value;
    }
}

@SuppressWarnings("unchecked")
public T[] sort(T[][] input) {
    BST bst = new BST();
    int size = Arrays.stream(input).mapToInt(t -> t.length).sum();
    T[] output = (T[])Array.newInstance(input[0][0].getClass(), size);

    for (int i = 0; i < input.length; i++) {
        for (int j = 0; j < input[0].length; j++) {
            bst.insert(input[i][j]);
        }
    }
    for (int i = 0; i < output.length; i++) {
        output[i] = (T)(Integer)bst.removeMin();
    }

    return output;
}

}

0 个答案:

没有答案