1

我目前正在学习如何使用 Java 中的列表。我遇到过使用 Collections.sort() 方法对列表中的字符串进行排序,并且效果很好。但是,当我创建用户定义的数据类型时,它不会排序并给出错误 -

“找不到适合 sort(List) 方法的方法 Collections.sort(List,Comparator) 不适用(无法从参数实例化,因为实际和形式参数列表长度不同)方法 Collections.sort(List) 不适用(推断类型不符合推断的声明边界:子边界:可比较)其中 T#1,T#2 是类型-变量:T#1 扩展方法 sort(List,Comparator) 中声明的对象 T#2 扩展方法 sort(List) 中声明的 Comparable"

这是代码 -

代码 -

package works;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Collections;

class Child 
{
private String name;
public Child(String name)
{
    this.name=name;
}
@Override
public String toString()
{
    return name;
}
}
class LOL
{
void Meth()
{
    Child s1 = new Child("Hi");
    Child s2 = new Child("Bye");
    Child s3 = new Child("And");
    List<Child> f1 = Arrays.asList(s1,s2,s3);
    System.out.println(f1);
    System.out.println();
    Collections.sort(f1);  // This line is the erroneous line.
}
}
public class SortColl
{
public static void main(String X[])
{
    LOL l = new LOL();
    l.Meth();

}
}
4

2 回答 2

5

ComparableChild类中实现

class Child implements Comparable<Child>{
    private String name;

    public Child(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return name;
    }

    @Override
    public int compareTo(Child child) {
        return name.compareTo(child.name);
    }
}
于 2013-08-23T16:39:15.700 回答
4

要对任何对象的集合进行排序,必须满足以下条件之一:

  1. 对象必须实现Comparable。在这种情况下,实施Comparable<Child>. 然后Collections.sort将能够使用该compareTo方法进行排序。
  2. 创建您自己的实现类ComparatorComparator<Child>并将该类的实例作为第二个参数传递给Collections.sort. 然后排序算法将使用Comparator对集合进行排序。
于 2013-08-23T16:40:40.410 回答