Java TreeSet<Long []> 基于数组的第一个元素进行比较
Java TreeSet<Long []> comparable based on array's first element
对于以下代码:
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
有没有一种巧妙的方法可以让添加到 TreeSet
中的 Long []
根据 Long []
的第一个元素排序?
您可以使用比较器初始化 TreeSet:
TreeSet<Long[]> ts = new TreeSet<Long[]>( new Comparator<Long[]>() { ... });
这允许您通过第一个元素比较长数组。或者,您可以创建一个 Wrapper class 来实现 Comparable 并保存数组。
您还没有将 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]);
}
}
);
对于以下代码:
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
有没有一种巧妙的方法可以让添加到 TreeSet
中的 Long []
根据 Long []
的第一个元素排序?
您可以使用比较器初始化 TreeSet:
TreeSet<Long[]> ts = new TreeSet<Long[]>( new Comparator<Long[]>() { ... });
这允许您通过第一个元素比较长数组。或者,您可以创建一个 Wrapper class 来实现 Comparable 并保存数组。
您还没有将 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]);
}
}
);