美文网首页
Merge.java使用了未经检查或不安全的操作。

Merge.java使用了未经检查或不安全的操作。

作者: 海人为记 | 来源:发表于2018-07-01 18:41 被阅读18次
import java.util.Arrays;

public class Merge {
    private static Comparable[] aux; // 归并所需的辅助数组
    public static void merge(Comparable[] a, int lo, int mid, int hi) {
        // 将a[lo..mid] 和 a[mid+1..hi]归并
        int i = lo, j = mid + 1;
        for (int k = lo; k <= hi; k++) {
            // 将a[lo..hi]复制到aux[lo..hi]
            aux[k] = a[k];
        }
        for (int k = lo; k <= hi; k++) {
            // 归并回到a[lo..hi]
            if(i > mid)
                a[k] = aux[j++];
            else if(j > hi)
                a[k] = aux[i++];
            else if(aux[j].compareTo(aux[i])<0)
                a[k] = aux[j++];
            else
                a[k] = aux[i++];
        }
    }
    public static void sort(Comparable[] a) {
        aux = new Comparable[a.length]; //一次性分配空间
        sort(a, 0, a.length-1);
    }
    private static void sort(Comparable[] a, int lo, int hi) {
        // 将数组a[lo...hi]排序
        if(hi <= lo) return;
        int mid = lo + (hi - lo) / 2;
        sort(a, lo, mid); // 将左半边排序
        sort(a, mid+1, hi); // 将右半边排序
        merge(a, lo, mid, hi); //归并结果
    }
    public static void main(String[] args) {

        //自顶向下的归并排序
        Integer a[] = {3,9,45,69,25,1,24,89,40};
        sort(a);
        System.out.println(Arrays.toString(a));
    }
}

直接编译会提示:


泛型错误.png

注: Merge.java使用了未经检查或不安全的操作。
注: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。
注: 某些消息已经过简化; 请使用 -Xdiags:verbose 重新编译以获得完整输出

但是已经生成字节码文件(.class),说明编译通过了,运行后也能得出正确答案.
经过查阅,是没有使用泛型,comparable后面加上<Integer>,但是本题为了保持sort函数的复用性,就没有加.
还有值得注意的一点是,定义数组时不能使用(int,double,string)等,而应该使用(Integer,Double,String)否则想Comparable转换的时候会出错.

相关文章

网友评论

      本文标题:Merge.java使用了未经检查或不安全的操作。

      本文链接:https://www.haomeiwen.com/subject/qahhuftx.html