简体   繁体   English

如何使用Collection.sort()对集合进行排序

[英]How to sort a collection using Collection.sort()

I am writing a program that stores an ArrayList of Person objects (input is from a text file). 我正在编写一个存储Person对象ArrayList的程序(输入来自文本文件)。

This is the code for the Person class, which I will create Person objects from: 这是Person类的代码,我将根据以下代码创建Person对象:

import java.io.Serializable;

public class Person implements Comparable<Person>, Serializable
{
private String firstName;
private String lastName;
private int age;

public Person(String firstName, String lastName, int age)
{
    this.firstName = firstName;
    this.lastName = lastName.toUpperCase();
    this.age = age;
}

public int getAge() 
{
    return age;
}

public String getName()
{
    return firstName;
}

/**
 * @return a String of the details of a person in the format:
 *      Name: <firstName> <lastName> Age: <age>
 */
public String toString()
{       
    return

            "Name: " + firstName + "" + lastName + "\t\t" + "Age: " + age;
}

/**
 * Compare the age of the current instance of Person to another age of the specified Person
 * @return negative number this < p
 * @return 0 if this == p
 * @return positive number if this > p
 */
public int compareTo(Person p) {
          return ((Integer)this.getAge()).compareTo(p.getAge());
}

And I created a Comparable interface: 我创建了一个Comparable接口:

public interface Comparable<T> {
public int compareTo(T o);
}

And here is the code for the class called Collection which will create an ArrayList to store Person objects, I ommitted parts of the code that were not relevant as it is long: 以下是名为Collection的类的代码,该代码将创建一个ArrayList来存储Person对象,我忽略了很长的代码中不相关的部分:

import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.StringTokenizer;
import java.util.Iterator;

public class Collection
{
private ArrayList<Person> people;

public Collection()
{
    people = new ArrayList<Person>();
}   

public void readFromFile(String filename)
{
    // code that will get input to assign values to fields to a Person

    Person newPerson = new Person(firstNameToken, lastNameToken, ageToken);
}

/**
 * Prints the details of each person held in the people ArrayList
 */
public void printDetails()
{       
    Iterator<Person> it = people.iterator();

        while(it.hasNext())
        {
        Person p = it.next();
        System.out.println(p.toString());
        }
}

public static void main(String [] args) throws FileNotFoundException
{
    Collection c = new Collection(); 

    // check
    //for(Person person : c.people) 
    //{
    //  System.out.println(person);
    //}

    Collections.sort(c.people);
}
}

However I get this error, the sort does not work: 但是我收到此错误,排序不起作用:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: Bound mismatch: The generic method sort(List) of type Collections is not applicable for the arguments (ArrayList). 线程“主”中的异常java.lang.Error:未解决的编译问题:绑定不匹配:Collections类型的通用方法sort(List)不适用于参数(ArrayList)。 The inferred type Person is not a valid substitute for the bounded parameter > 推断的类型Person不是有效替代边界参数>

Does anyone know why? 有人知道为什么吗? I am looking furiously around on google for solutions, I can't see what I am missing. 我在google上四处寻找解决方案,我看不到我所缺少的东西。 I've implemented comparable.. 我已经实现了可比性。

And I created a Comparable interface: public interface Comparable { public int compareTo(T o); 我创建了一个Comparable接口:public interface Comparable {public int compareTo(T o); } }

You are not supposed to create your own interface. 您不应该创建自己的界面。 Use java.lang.Comparable<T> , the one that the Collections.sort() method expects your object to implement 使用java.lang.Comparable<T> ,它是Collections.sort()方法期望您的对象实现的对象

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM