Java Can';t在我的队列中放置字符串[]对象<;字符串[]>;
Java Can';t在我的队列中放置字符串[]对象<;字符串[]>;,java,queue,priority-queue,Java,Queue,Priority Queue,我收到此错误java.lang.ClassCastException:[Ljava.lang.String;无法转换为java.lang.Comparable 这是有问题的代码 final String[] methods = parseRule.getMethods(); // add to the param. methodsToInsert.add(methods); // <-- error from here //Where public String[] getMethod
我收到此错误
java.lang.ClassCastException:[Ljava.lang.String;无法转换为java.lang.Comparable
这是有问题的代码
final String[] methods = parseRule.getMethods();
// add to the param.
methodsToInsert.add(methods); // <-- error from here
//Where
public String[] getMethods() {
return new String[]{new String(parseMethod), new String(unParseMethod)};
}
//and param
Queue<String[]> methodsToInsert
//and at some point the methodsToInsert Object is
new PriorityQueue<String[]>();
final String[]methods=parseRule.getMethods();
//添加到参数。
methodsToInsert.add(methods);//的文档说明:
优先级队列的元素根据其自然顺序排序,或由队列构造时提供的比较器排序,具体取决于使用的构造函数。优先级队列不允许null
元素。依赖自然顺序的优先级队列也不允许插入不可比较的对象(这样做可能会导致ClassCastException
)
您应该将一个比较器
实例作为String[]传递给将用于比较的PriorityQueue
的
不能按自然顺序进行比较。APriorityQueue
必须以某种方式对其元素进行排序,要么在其构造函数中接受比较器,要么依赖其元素具有可比性
发件人:
优先级队列的元素根据其自然顺序排序,或由队列构造时提供的比较器根据使用的构造函数排序。优先级队列不允许空元素。依赖自然顺序的优先级队列也不允许插入不可比较的对象(这样做可能会导致ClassCastException)
您没有提供比较器
,因此它希望添加的所有元素都是可比的
,但数组不是可比的
使用。提供您自己的比较器。包含“根据其自然顺序排序,或由队列构造时提供的比较器排序”的元素虽然Sting对象具有自然顺序,但字符串数组没有。您需要在创建队列对象时提供一个Comparator对象,该对象可以表示一个字符串数组大于或小于另一个字符串数组。您不能将字符串[]
添加到优先级队列
,因为字符串[]
不可比
。解决方案取决于您真正需要完成的任务
对字符串进行排队
使用队列的addAll()
方法
将字符串排队并保留分组
将您的字符串[]
对象排入队列
将字符串排队并保留优先级
使用PriorityQueue的addAll()
方法
对字符串进行排队、保留分组和保留优先级
将您的String[]
包装到一个新类中。应用可比较的接口。实现compareTo()
和equals()
方法。在PriorityQueue
中对自定义对象进行排队,因为我正在使用add?not put?否,请阅读错误消息。存在(运行时)键入对add
接受的内容的限制(对于该队列接受),即它们必须实现Comparable。@另一个编译器错误是正确的。没有数组实现Comparable。您的队列是什么具体类型的队列?您可以发布一个可编译的示例吗?您可以使用带有比较器的;您需要编写字符串[]
比较器。