使用与数组相同的算法对 ArrayList 进行排序

Posted

技术标签:

【中文标题】使用与数组相同的算法对 ArrayList 进行排序【英文标题】:Sorting ArrayList With same Algo as Array 【发布时间】:2013-09-21 19:43:52 【问题描述】:

我正在尝试通过实现我用来对数组进行排序的类似算法来对 ArrayList 进行排序。我知道我可以使用 Collects.sort,但由于我还是初学者,我宁愿编写代码并学习它。比较存储在数组列表中的两个整数对象的值。这是我的代码,其中分数数组通过引用此方法作为参数传递。现在这段代码没有正确排序,而是在所有下标处插入数组中的最小数字。在旁注中,我很好奇如何使用 compareTo() 方法比较索引 j 和索引最小的分数,因为我正在比较对象而不是基元,我觉得这将是比强制转换更好的解决方案。谢谢!

        int smallest;
    for (int i = 0; i < 5; i++)
    
        smallest = i;
        for (int j = i; j < scores.size(); j++)
        
            if ((Integer) scores.get(j) < (Integer) scores.get(smallest))
                smallest = j;
        

        int temp = (Integer) scores.get(i);
        int swap = (Integer) scores.get(smallest); 
        scores.add(i, swap);
        scores.add(smallest, temp);

    

【问题讨论】:

使用集合界面对列表进行排序。 【参考方案1】:

现在这段代码没有正确排序,而是在数组的所有下标处插入最小的数字。

您需要使用set() 方法而不是add() 来替换元素。

在旁注中,我很好奇如何使用 compareTo() 方法比较索引 j 和索引最小的分数,因为我正在比较对象而不是基元,我觉得这将是比强制转换更好的解决方案

您可以通过为您的集合指定显式类型来轻松避免强制转换,例如new ArrayList&lt;Integer&gt;

把所有的代码放在一起是更正后的代码:

    ArrayList<Integer> scores = new ArrayList<Integer>();
    scores.add(5);
    scores.add(4);
    scores.add(2);
    scores.add(1);
    scores.add(3);
    System.out.println(scores);
    int smallest;
    for (int i = 0; i < scores.size(); i++)
    
        smallest = i;
        for (int j = i; j < scores.size(); j++)
        
            if (scores.get(j) < scores.get(smallest))
                smallest = j;
        

        int temp = scores.get(i);
        int swap = scores.get(smallest);
        scores.set(i, swap);
        scores.set(smallest, temp);

    
    System.out.println(scores);

【讨论】:

谢谢!非常感谢。

以上是关于使用与数组相同的算法对 ArrayList 进行排序的主要内容,如果未能解决你的问题,请参考以下文章

如何根据变量值对ArrayList进行排序[重复]

JAVA 算法---桶排序算法与基数排序算法

数据结构与算法--数组

数据结构与算法数组

14常见算法数组分组排序

如何以相同的方式随机化两个 ArrayList?