在Java中将固定大小数组添加到列表中
如何将字符串[]添加到集合中以避免异常。 我将数组的大小设置为100,它不需要是固定大小的数组,但 我需要访问数组的成员,如x[],以便插入数组值在Java中将固定大小数组添加到列表中,java,arrays,string,set,Java,Arrays,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.l
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)
数组没有自然顺序,这就是为什么会出现此异常 一种方法是在构建树集时提供自定义比较器
你怎么理解这个例外?字符串[]不能转换为java.lang.CompariableUse HashSet或LinkedHashSet。TreeSet维护排序顺序,添加的元素必须相互比较。谢谢你,你关于顺序的建议很重要,我只是将HashSet而不是TreeSet放进去,因为我需要在集合中有唯一的数组。@fpopic是的,但你需要使用包装类,因为数组不会覆盖hashcode和equals方法。
Set<String[]> s = new TreeSet<String[]>(new Comparator<String[]>() {
@Override
public int compare(String[] o1, String[] o2) {
//your logic here
}
});
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);
}
}