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

标签 java sorting arraylist

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

相关文章:

java - Java 中矩阵的模逆

java - 有什么方法可以在 cassandra 中实现无状态分页吗?

java - 移植包括状态的 Java 对象(经过训练的 LIBSVM)

python - 根据对角线项对矩阵进行排序

arrays - 排序数组所需的最少操作数

java - ArrayList 返回错误值

java - 将数组列表中包含的对象的参数传递给方法

java - 计算 LookAt 矩阵

c++ - 排序函数调用后数组没有改变

java - 将 arraylist 数据从 object/float 转换为 int 以在方法中使用