【发布时间】:2018-04-25 15:40:06
【问题描述】:
我写了这个版本的合并排序(这是我合并部分的部分),但它有一个问题。我想将它与泛型一起使用,因此我制作了一个 Object 数组以在此过程中为我提供帮助。当我编译时,它会给出一个警告,我用代码顶部的那一行来抑制它。有没有办法避免使用对象数组? (方法 compare 来自另一个类,但它的工作原理与 compareTo 相同):
@SuppressWarnings("unchecked")
public static <T> void merge(ArrayList<T> array, Comparator<T> c, int p, int mid, int q) {
Object[] tmp = new Object[q-p+1];
int i = p;
int j = mid+1;
int k = 0;
while (i <= mid && j <= q) {
if (c.compare(array.get(i), array.get(j))<0)
tmp[k] = array.get(i++);
else
tmp[k] = array.get(j++);
k++;
}
if (i <= mid && j > q) {
while (i <= mid)
tmp[k++] = array.get(i++);
} else {
while (j <= q)
tmp[k++] = array.get(j++);
}
for (k = 0; k < tmp.length; k++)
array.set(k+p, (T)tmp[k]);
}
【问题讨论】:
-
使用泛型数组有什么问题?
T[] tmp -
如何申报? T[] tmp = 新 T[q-p+1]?
标签: java algorithm sorting merge