以下代码:
TreeSet<Long[]> ts = new TreeSet<Long[]>();
ts.add(new Long[] {22L,22L});
ts.add(new Long[] {2L,22L});
ts.add(new Long[] {24L,22L});
ts.add(new Long[] {11L,22L});
ts.add(new Long[] {7L,22L});
它抛出:
Ljava.lang.Long; cannot be cast to java.lang.Comparable
因为Long []
没有意识到comparable
是否有一种巧妙的方法可以将Long []
添加到TreeSet
根据Long []
的第一个元素排序?
答案 0 :(得分:5)
您可以使用比较器初始化TreeSet:
TreeSet<Long[]> ts = new TreeSet<Long[]>( new Comparator<Long[]>() { ... });
这允许您通过第一个元素比较Long-array。或者,您可以创建一个Wrapper类来实现Comparable并保存数组。
答案 1 :(得分:3)
您尚未将Comparator
传递给TreeSet
构造函数,因此TreeSet
将依赖其Comparable
项。但它们不是Comparable
,因此是例外。
将Comparator<Long[]>
传递给the constructor that takes one,以便TreeSet
知道您希望如何比较Long[]
。
TreeSet<Long[]> ts = new TreeSet<Long[]>(
new Comparator<Long[]>() {
public int compare(Long[] a, Long[] b)
{
return Long.compare(a[0], b[0]);
}
}
);