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
不能按自然顺序进行比较。

A
PriorityQueue
必须以某种方式对其元素进行排序,要么在其构造函数中接受
比较器,要么依赖其元素具有可比性

发件人:

优先级队列的元素根据其自然顺序排序,或由队列构造时提供的比较器根据使用的构造函数排序。优先级队列不允许空元素。依赖自然顺序的优先级队列也不允许插入不可比较的对象(这样做可能会导致ClassCastException)

您没有提供
比较器
,因此它希望添加的所有元素都是
可比的
,但数组不是
可比的


使用。

提供您自己的
比较器。

包含“根据其自然顺序排序,或由队列构造时提供的比较器排序”的元素虽然Sting对象具有自然顺序,但字符串数组没有。您需要在创建队列对象时提供一个Comparator对象,该对象可以表示一个字符串数组大于或小于另一个字符串数组。

您不能将
字符串[]
添加到
优先级队列
,因为
字符串[]
不可比
。解决方案取决于您真正需要完成的任务

对字符串进行排队

使用队列的
addAll()
方法

将字符串排队并保留分组

将您的
字符串[]
对象排入
队列

将字符串排队并保留优先级

使用PriorityQueue的
addAll()
方法

对字符串进行排队、保留分组和保留优先级


将您的
String[]
包装到一个新类中。应用可比较的接口。实现
compareTo()
equals()
方法。在
PriorityQueue

中对自定义对象进行排队,因为我正在使用add?not put?否,请阅读错误消息。存在(运行时)键入对
add
接受的内容的限制(对于该队列接受),即它们必须实现Comparable。@另一个编译器错误是正确的。没有数组实现Comparable。您的队列是什么具体类型的队列?您可以发布一个可编译的示例吗?您可以使用带有
比较器的;您需要编写
字符串[]
比较器。