如何在Java中对用户定义类型列表进行排序?

时间:2013-08-23 16:37:20

标签: java list sorting arraylist

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

“找不到合适的排序方法(列表)     方法Collections.sort(List,Comparator)不适用       (无法从参数实例化,因为实际和形式参数列表的长度不同)     方法Collections.sort(List)不适用       (推断类型不符合声明的界限)         推断:孩子         bound(s):可比较)   其中T#1,T#2是类型变量:     T#1扩展了在方法排序中声明的Object(List,Comparator)     T#2扩展了方法排序(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();

}
}

2 个答案:

答案 0 :(得分:5)

Child

中实施Comparable
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);
    }
}

答案 1 :(得分:4)

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

  1. 对象必须实现Comparable。在这种情况下,请实施Comparable<Child>。然后Collections.sort将能够使用compareTo方法进行排序。
  2. 创建自己的实现Comparator的类,特别是Comparator<Child>,并将该类的实例作为第二个参数传递给Collections.sort。然后排序算法将使用Comparator对集合进行排序。