0

所以我创建了一个员工对象和一个驱动程序。驱动程序包含一个Employees 的ArrayList,这个特定的方法返回名字按字母顺序排在第一位的Employee。

让我们在 ArrayList 'staff' 中添加两个员工,并称他们为“a”和“z”。

出于某种原因,当我期望它返回员工“a”时,它总是返回员工“z”。我是否正确使用了 compareTo 方法,还是完全不同?

 public Employee first()
    {
        int guy = 0;


        for ( int x = 1 ; x < staff.size() ; x ++ )
        {
            if ( staff.get( x -1 ) instanceof Employee && staff.get( x - 1 ).getName().compareTo( staff.get( x ).getName() ) < 0 )
                guy = x - 1;
        }

        return ( (Employee) staff.get( guy ) );
    }
4

1 回答 1

2

无需重新发明轮子。使用自定义比较器并使用Collections排序方法。

public class NameComparator implements Comparator<Employee> {
    @Override
    public int compare(Employee o1, Employee o2) {
        return o1.getName().compareTo(o2.getName());
    }
}

Collections.sort(yourArrayList, new NameComparator());

或者,您可以确保您的Employee类实现Comparable<Employee>并且您可以不使用上面的自定义比较器。这假设您只想根据名称进行比较。

于 2013-02-17T07:26:06.873 回答