![](/img/trans.png)
[英]Selection sorting an instance of an object of type ArrayList of objects giving weird results
[英]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.