gpt4 book ai didi

java - 不确定如何根据 ArrayList 中的对象部分对 ArrayList 进行排序 (Java)

转载 作者:行者123 更新时间:2023-12-01 15:30:15 25 4
gpt4 key购买 nike

我有一个 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/

25 4 0