使用与数组相同的算法对 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<Integer>
。
把所有的代码放在一起是更正后的代码:
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 进行排序的主要内容,如果未能解决你的问题,请参考以下文章