Java TreeSet <long [] =“”>基于数组的第一个元素</long>进行比较

时间:2015-03-27 20:10:37

标签: 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});

它抛出:

Ljava.lang.Long; cannot be cast to java.lang.Comparable

因为Long []没有意识到comparable

是否有一种巧妙的方法可以将Long []添加到TreeSet根据Long []的第一个元素排序?

2 个答案:

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