簡體   English   中英

在ArrayList中對對象進行排序會產生意外結果

[英]Sorting Objects in ArrayList giving unexpected results

這里記錄是Employee類型的對象的ArrayList。 我正在嘗試根據employeeName屬性對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有一個用於這種排序的內置機制 - 你只需要實現一個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,你們是對的。 add(index,object)方法將對象添加到索引中,並且右移了已經存在的對象,而不是替換它,這是我打算實現的。 所以,添加record.remove(i + 1); 和record.remove(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);

            }   

        }

    }




}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM