这里的记录是类型员工的对象的数组列表。我正在尝试根据applyEnamame属性对ArrayList进行排序。不幸的是,它给出了不必要的结果。
public void sortByName(){
for(int i = 0; i < SalesDataManager.N; i++){
for(int j = i+1; j < SalesDataManager.N; j++){
if(record.get(i).getEmployeeName().compareToIgnoreCase(record.get(j).getEmployeeName()) > 0){
Employee etemp = record.get(i);
record.add(i,record.get(j));
record.add(j,etemp);
}
}
}
displayAllRecords();
}
我已经在Stackoverflow中介绍了有关此主题的其他帖子,并发现大多数帖子都暗示了相同的方式。我在这里做错了什么?
预先感谢!
您正在迭代record
列表,并根据某些条件确定在哪里添加当前元素。但是,您不是先清除列表,因此这种方法不可避免地会导致重复。
java,幸运的是,具有用于排序的构建IT机制 - 您只需要实现Comparator
:
public class EmployeeNameComparator implements Comparator<Emplyoee> {
@Override
public int compare (Employee a, Employee b) {
return a.getEmployeeName().compareToIgnoreCase(b.getEmployeeName());
}
然后只使用它:
Collections.sort (record, new EmployeeNameComparator());
如果您使用的是Java 8,也可以使用新的清洁程序语法:
Collections.sort
(record, (a, b) -> a.getEmployeeName().compareToIgnoreCase(b.getEmployeeName());
@howard Wang和Mureinik,你们是对的。添加(索引,对象)方法将对象添加到索引中,并正确地移动已经存在的对象,而不是替换它,这是我打算实现的目标。因此,添加record.remove(i 1);和record.emove(j 1);对于代码而言,这是一个技巧!
public void sortBySales()
{
for(int i = 0; i < SalesDataManager.N; i++)
{
for(int j = i+1; j < SalesDataManager.N; j++)
{
if(record.get(i).getEmployeeSales() > record.get(j).getEmployeeSales())
{
Employee etemp = record.get(i);
record.add(i,record.get(j));
record.remove(i+1);
record.add(j,etemp);
record.remove(j+1);
}
}
}
}