Java树集基于数组的第一个元素进行比较

Java树集基于数组的第一个元素进行比较,java,treeset,Java,Treeset,对于以下代码: 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}); 因为长[]没有实现可比性

对于以下代码:

    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});
因为长[]没有实现可比性


有没有一种简单的方法可以根据Long[]的第一个元素将Long[]添加到树集中进行排序?

您可以使用比较器初始化树集:

TreeSet<Long[]> ts = new TreeSet<Long[]>( new Comparator<Long[]>() { ... });
这允许您按第一个元素比较长数组。或者,您可以创建一个包装器类,该类实现Comparable并保存数组。

您尚未将Comparator传递给TreeSet构造函数,因此TreeSet将依赖于其可比较项。但它们不具有可比性,因此是例外

将比较器传递给,以便树集知道您希望如何比较长[]s

TreeSet<Long[]> ts = new TreeSet<Long[]>(
   new Comparator<Long[]>() {
      public int compare(Long[] a, Long[] b)
      {
         return Long.compare(a[0], b[0]);
      }
   }
);

在比较数组的第一个值时,可以向构造函数提供自定义比较器。我将创建一个Pair或Coord类来存储这两个长值,并实现一个适当的比较器,而不是使用这种方法。
TreeSet<Long[]> ts = new TreeSet<Long[]>(
   new Comparator<Long[]>() {
      public int compare(Long[] a, Long[] b)
      {
         return Long.compare(a[0], b[0]);
      }
   }
);