在Java中将固定大小数组添加到列表中

在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

如何将字符串[]添加到集合中以避免异常。 我将数组的大小设置为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)  

数组没有自然顺序,这就是为什么会出现此异常

一种方法是在构建树集时提供自定义比较器


你怎么理解这个例外?字符串[]不能转换为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);
    }   
}