我有一个 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));
}
我想这是错误的处理方法,因为我编译时它没有排序。
我现在认为我应该做的是创建两个ArrayList(一个是firstName,一个是LastName),并在for循环中说,如果(lastName相同)则比较firstName,但我不确定如果我需要两个 ArrayList 来实现这一点,因为它看起来不必要地复杂。
那你觉得怎么样?
编辑:我正在添加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;
}
最佳答案
我认为该对象应该实现一个 compareTo
方法,该方法遵循正常的 Comparable
约定 - 在多个字段上搜索排序。您是正确的,没有必要有两个列表。
关于java - 不确定如何根据 ArrayList 中的对象部分对 ArrayList 进行排序 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9611907/