我的有序顺序表为什么不能工作?
来源:2-6 使用泛型
慕虎5119090
2021-04-08
波波老师您好,我仿照您的数组,我定义了个OrderSqList(有序顺序表)的类,可是发现它不能工作,在创建有序顺序表的对象时,说调用它的构造函数出错,应该就是data =(E[]) new Object[capacity]; 这个语句出错,报错信息是:Exception in thread “main” java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Comparable;
可是我不知道如何解决,请老师指点。
我的源代码如下:
public class OrderSqList<E extends Comparable > {
private E[ ] data;
private int size;
//构造函数,传入数组容量构造Array
public OrderSqList(int capacity){
data =(E[]) new Object[capacity];
size=0;
}
//无参构造函数,默认数组容量为10
public OrderSqList() {
this(10);
}
public int getsize() {
return size;
}
public int getCapacity() {
return data.length;
}
public boolean isEmpty() {
return size==0;
}
public void add(E e) {
//判断数组是否已满
if(size==data.length)
throw new IllegalArgumentException("Add Faild,List is full.");
//移动元素,腾出位置
int cur=size-1;
while(e.compareTo(data[cur])<0&&cur>=0) {
data[cur+1]=data[cur];
cur--;
}
//将e插入到cur+1位置
data[cur+1]=e;
//维护size
size++;
}
@Override
public String toString() {
StringBuilder res=new StringBuilder();
res.append(String.format("Array:size=%d,capacity=%d\n",size,data.length));
res.append('[');
for(int i=0;i<size;i++) {
res.append(data[i]);
if(i!=size-1)
res.append(",");//元素之间用逗号分隔
}
res.append(']');
return res.toString();
}
public static void main(String[] args) {
OrderSqList<Integer> arr1 = new OrderSqList<>();
arr1.add(6);
arr1.add(2);
arr1.add(5);
arr1.add(8);
System.out.println(arr1);
}
}
写回答
2回答
-
liuyubobobo
2021-04-08
因为你做了泛型约束,要求 E 必须满足 Comparable 接口,但是 Object 不满足 Comparable 接口。
可以改成这样:
data =(E[]) new Comparable[capacity];
这样在构造的时候,你的代码没有问题了。但是似乎你的代码在 add 的时候还有其他错误,自己调试试试看?
继续加油!:)
00 -
慕虎5119090
提问者
2021-04-08
代码首行粘贴错误:public class OrderSqList<E extends Comparable <E>>
00