【发布时间】:2018-06-26 15:54:01
【问题描述】:
我正在尝试将 Object[] 数组转换为泛型排序 这部分代码我已经实现了
public class SortedArraySet<T extends Comparable<T>> implements Set<T>, Comparator<T> {
T[] arr;
int size = 5, index = 0;
@SuppressWarnings("unchecked")
SortedArraySet() {
arr = (T[]) new Object[5];
System.out.println("New set was initiated");
}
@Override
public int compare(T a, T b) {
if (a.compareTo(b) > 0)
return 1;
else
return 0;
}
当我运行它时,我得到以下编译错误
线程“主”java.lang.ClassCastException 中的异常: java.base/[Ljava.lang.Object;不能转换为 java.base/[Ljava.lang.Comparable;在 q3.SortedArraySet.(SortedArraySet.java:12) 在 q3.q3main.main(q3main.java:6)
第6行说明如下
SortedArraySet<Integer> sa = new SortedArraySet<Integer>();
在我添加extend Comparable(以及compareTo)以对集合进行排序之前,该代码可以正常工作
是否可以使用 Collections.sort?我已经尝试过,但它似乎不适用于这样的数组!
【问题讨论】:
-
旁注:你知道
TreeSets,对吧? -
这是 100% 运行时。当您声明这些转换时,编译器会信任您。
-
是的,我知道所有其他数据结构,但我只能使用数组:| ,我会在 10 分钟内用 LinkedList 解决这个问题,这里的重点是实现一个通用数组排序集