我的有序顺序表为什么不能工作?

来源: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 的时候还有其他错误,自己调试试试看?


继续加油!:)

0
0

慕虎5119090

提问者

2021-04-08

代码首行粘贴错误:public class OrderSqList<E extends Comparable <E>>

0
0

玩转数据结构

动态数组/栈/队列/链表/BST/堆/线段树/Trie/并查集/AVL/红黑树…

6221 学习 · 1704 问题

查看课程