【发布时间】:2012-03-08 01:56:34
【问题描述】:
我有一个 Sorts 类,它对通过它的任何类型的任何 ArrayList 进行排序(基于插入排序,这是分配的方向),并使用插入排序按字典顺序对列表中的项目进行排序:
public class Sorts
{
public static void sort(ArrayList objects)
{
for (int i=1; i<objects.size(); i++)
{
Comparable key = (Comparable)objects.get(i);
int position = i;
while (position>0 && (((Comparable)objects.get(position)).compareTo(objects.get(position-1)) < 0))
{
objects.set(position, objects.get(position-1));
position--;
}
objects.set(position, key);
}
}
}
在我的其他文件中,我使用了一种方法(稍后在 main 中调用)对 Owner 类型的对象进行排序,我们必须按姓氏对它们进行排序(如果它们相同,则按名字):
说明:“将所有者列表按姓氏从 A 到 Z 排序。如果多个所有者具有相同的姓氏,则比较他们的名字。此方法调用 Sorts 类中定义的排序方法。”
我首先想到的是在 for 循环中获取每个所有者的姓氏,将其添加到字符串类型的临时 ArrayList,调用 Sorts.sort(),然后将其重新添加回 ArrayList ownerList:
public void sortOwners() {
ArrayList<String> temp = new ArrayList<String>();
for (int i=0; i<ownerList.size(); i++)
temp.add(((Owner)ownerList.get(i)).getLastName());
Sorts.sort(temp);
for (int i=0; i<temp.size(); i++)
ownerList.get(i).setLastName(temp.get(i));
}
我猜这是处理它的错误方法,因为我编译时它没有排序。
我现在认为我应该做的是创建两个 ArrayLists(一个是 firstName,一个是 LastName)并说,在 for 循环中,如果(lastName 相同)然后比较 firstName,但我不确定如果我需要两个 ArrayLists,因为它看起来不必要的复杂。
那你怎么看?
编辑:我正在添加 compareTo(Object other) 的一个版本:
public int compareTo(Object other)
{
int result = 0;
if (lastName.compareTo(((Owner)other).getLastName()) < 0)
result = -1;
else if (lastName.compareTo(((Owner)other).getLastName()) > 0)
result = 1;
else if (lastName.equals(((Owner)other).getLastName()))
{
if (firstName.compareTo(((Owner)other).getFirstName()) < 0)
result = -1;
else if (firstName.compareTo(((Owner)other).getFirstName()) > 0)
result = 1;
else if (firstName.equals(((Owner)other).getFirstName()))
result = 0;
}
return result;
}
【问题讨论】: