如何将String []添加到Set避免异常中。 我把数组的大小设置为100,它不需要是固定大小的数组 我需要访问数组的成员,如x [],所以我可以插入数组值。
Set<String[]> s = new TreeSet<String[]>();
String[] x = new String[100];
int i=0;
x[i++] = ...
x[i++] = ...
s.add(x);
Ljava.lang.String; cannot be cast to java.lang.Comparable
at java.util.TreeMap.compare(TreeMap.java:1188)
at java.util.TreeMap.put(TreeMap.java:531)
at java.util.TreeSet.add(TreeSet.java:255)
答案 0 :(得分:3)
Arrays没有&#34;自然顺序&#34;,这就是你得到这个例外的原因。
一种方法是在构建TreeSet
时提供自定义比较器。
Set<String[]> s = new TreeSet<String[]>(new Comparator<String[]>() {
@Override
public int compare(String[] o1, String[] o2) {
//your logic here
}
});
但我认为您不应该使用TreeSet
来处理这类事情,因为很难说明如何定义比较数组的订单。
IMO你最好的选择是创建一个包装类,重写hashcode和equals并将它们放在HashSet
中。
class WrapperStringArray {
private String[] arr;
//constructors, getters, setter and additional methods
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + Arrays.hashCode(arr);
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
WrapperStringArray other = (WrapperStringArray) obj;
return Arrays.equals(arr, other.arr);
}
}