【问题标题】:Collections.sort() errorCollections.sort() 错误
【发布时间】:2018-06-05 16:55:00
【问题描述】:

我正在尝试根据 A 类的 int r 对 B 类中名为 BinOrder 的类型 A 的列表进行排序。

但是我收到 Collections.sort(BinOrder); 行的此错误;

The method sort(List<T>) in the type Collections is not applicable for the arguments (ArrayList<A>)

A类:

public class A{
int s; 
int r;

public A(int si, int ri) {
    s=si;
    r= ri;
 }
}

B类:

import java.util.ArrayList;
import java.util.Collections;


public class B implements Comparable<A> {



    public Iterator<A> randomMethodName(int a) {
        ArrayList<A> BinOrder = new ArrayList<A>();
                A a = new A(1,3)
                A a2 = new A(1,4)

                BinOrder.add(a);
                BinOrder.add(a2);
        }

        // sort array in increasing order of r
        Collections.sort(BinOrder);
        return BinOrder;
    }

    @Override
    public int compareTo(A list) {

        return null;
    }
}

【问题讨论】:

  • 你的 A 没有可比性。
  • 您的示例中有很多编译器错误。请更正。
  • 您希望您的compareTo 方法如何编译? null 不能转换为 int...
  • 我认为无论 compareTo() 方法在哪里都需要实现可比性? @JonSkeet,这不是编译错误,而是... IDE 错误?当我将鼠标悬停在 Collections.sort();它弹出错误。
  • @user2369869:您的代码有多个问题。如果要实现Comparable,则需要实现compareTo,但您不要通过返回null来实现它...

标签: java compareto


【解决方案1】:

为了能够在AArrayList 上使用Collection.sort() 的单参数版本,A 应该实现Comparable 接口:

public class A implements Comparable<A> {
  ...
  @Override
  int compareTo(A rhs) {
    ...
  }
}

【讨论】:

  • 那么 A 类而不是 B 类应该是具有 compareTo() 方法并实现 Comparable 接口的类吗?
  • @user2369869:是的。您正在对A 的实例进行排序,这就是您需要进行比较的内容。为此,B 无关紧要。
【解决方案2】:

这是 Collections.sort 的签名:

public static <T extends Comparable<? super T>> void sort(List<T> list)

A 必须为此方法实现 Comparable。

BinOrderArrayList&lt;A&gt; 类型时,您尝试将BinOrder 传递给此方法,但由于A 未实现Comparable&lt;A&gt;,因此它不符合方法的签名。

要么更改 A 以实现 Comparable,要么使用接受 Comparator 的 sort 方法:

public static <T> void sort(List<T> list, Comparator<? super T> c)

【讨论】:

  • 我认为无论 compareTo() 方法在哪里都需要实现可比较?
  • @user2369869 compareTo 是您必须为 Comparable 接口实现的方法,因此正好相反。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-10
  • 2017-04-17
  • 2013-10-04
  • 2013-08-15
  • 1970-01-01
  • 2012-12-28
相关资源
最近更新 更多