1

以下程序的输出不是我所期望的。这个程序有什么问题?请建议。

[Hello11​​3,Hello380,Hello293,Hello290,Hello246,Hello456,Hello797,Hello888,Hello981]

编辑:我只想这样做。不使用 collections.sort()。

   public class Sample {

    public static void main(String[] args) {
        Random random = new Random(10);

        List<Employee> employees = new ArrayList<Employee>();
        for (int i=0;i<10;i++)
        {
            Employee e = new Employee(i,"Hello"+random.nextInt(1000));
            employees.add(e);
        }
        System.out.println(employees);
    }

    }

    class Employee implements Comparable<Employee>
    {
    private int empNo;
    private String empName;

    public int getEmpNo() {
        return empNo;
    }
    public void setEmpNo(int empNo) {
        this.empNo = empNo;
    }
    public String getEmpName() {
        return empName;
    }
    public void setEmpName(String empName) {
        this.empName = empName;
    }

    Employee(int empNo,String empName)
    {
        this.empName=empName;
        this.empNo=empNo;
    }

    @Override
    public String toString() {

        return empName+" \n";
    }

    @Override
    public int compareTo(Employee o) {

        return this.getEmpName().compareTo(o.getEmpName());
    }

}

4

5 回答 5

1

保持添加元素时的ArrayList元素顺序。如果要对它们进行排序,则需要创建一个将使用compareTo您实现的排序方法,或者只需调用Collections.sort(employees).

我建议使用您自己的排序算法实现。你可以尝试使用insertion sortor quicksort,这样你就可以充分利用不使用已经实现的东西(如 Collections.sort )。

您也可以使用TreeSet自动对集合进行排序,但是,Set您不会有重复项。

于 2013-09-20T08:39:17.837 回答
0

你忘了对它们进行排序

Collections.sort(employees);
System.out.println(employees);

该方法Collections.sort()将隐含地使用对对象compareTo进行排序的方法。Employee

该集合ArrayList只是一个有序集合,没有排序。所以你需要明确排序

如果要在不使用的情况下进行排序Collections.sort,则必须创建 aTreeSet并将元素添加到其中,然后转换TreeSetArrayList

Set<Employee> employeeSet = new TreeSet<Employee>(employees);
List<Employee> sortedList = new ArrayList<Employee>();
sortedList.addAll(employeeSet);
于 2013-09-20T08:37:40.847 回答
0

要么使用 Collections.sort 对 ArrayList 进行排序,要么使用 TreeSet 而不是 ArrayList,它会在您插入时进行排序。

于 2013-09-20T08:39:11.930 回答
0

使用Set<Employee> employees = new TreeSet<Employee>();代替 List<Employee> employees = new ArrayList<Employee>();

于 2013-09-20T08:43:14.717 回答
0

您正在覆盖 compareTo 方法。因此,要默认使用您的实现,您应该使用类似TreeSetor的集合TreeMap。要对数组列表进行排序,您必须使用Collections.sort().

另一件事是您的方法的实现对于您想要实现的目标是错误的。它应该是

@Override
public int compareTo(Employee o) {
String first = this.getEmpName().append(String.valueOf(this.empNo);
String second= o.getEmpName().append(String.valueOf(o.empNo);
    return (first ).compareTo(second);
}
于 2013-09-20T08:50:05.177 回答