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]);
      }
   }
);