1
import java.util.ArrayList;
import java.util.Random;

public class Final
{
    public static void main(String[]arg)
    {
        ArrayList<Integer>randomNumber2=new ArrayList<Integer>();
        Random rand=new Random();
        for(int i=0;i<10;i++)
        {
            randomNumber2.add(new Integer(rand.nextInt(50)));
        }
}

我创建了这个随机生成的数组列表,它生成数字 1-50。我想对生成的数字进行升序排序。如果不使用 Collection.sort,我将如何使用 ArrayList 来做到这一点?

4

3 回答 3

1

不只是复制和粘贴代码,让我们在这里考虑答案。您有 10 个值,您希望将它们按升序添加到数组中。如果你真的在脑海中做这件事,你会如何组织它?

一种方法(简单,我可以在这里解释,我敢打赌你可以实现它)是将第一个数字分配给 Arraylist 的开头。然后,当生成第二个数字时,将其与 Arraylist 中的第一个值进行检查,如果新生成的数字低于您检查的数字,则将第一个数字移回 Arraylist 中的 1 个插槽并插入新的新空位中的号码。

如果您检查一个新生成的数字,比如说 Arraylist 中的 2 个数字,并且这个新数字介于第一个数字和第二个数字的值之间,那么当您检查新数字对第一个数字时,它将检查并继续执行代码. 然后,当您检查新数字与 Arraylist 中的第二个数字并发现它较低时,您将该数字移回 ArrayList 中的 1 个插槽并将新数字插入插槽 2。

如果您检查一个新生成的数字,例如到目前为止的 3 个数字(这是现在的第四次迭代)并且它到达 arraylist 中为空的第四个值,那么您将新生成的数字分配给第四个插槽,因为它应该是新的最大值。

这不像我想要的那样有意义,但我猜这是针对实验室/PA/hw/类似的东西;所以我希望你能接受我写的东西,理解它,并为它编写你自己的代码。这不是最有效的方法 - 但它是一种易于理解的方法,几乎​​任何人都可以编码,并且非常适合简单的课堂作业。

干杯!

于 2013-04-28T03:22:54.280 回答
0

这是 collections.sort 在内部使用的代码,如果您对 collections 类有任何类型的保留,您也可以使用它。您可以在课堂上制作此实用程序方法

public static <T extends Comparable<? super T>> void sort(List<T> list) {
   Object[] a = list.toArray();
    Arrays.sort(a);
    ListIterator<T> i = list.listIterator();
   for (int j=0; j<a.length; j++) {
   i.next();
   i.set((T)a[j]);
}
于 2013-04-28T02:40:20.163 回答
-3

有很多很多的排序算法,但是因为它听起来不像性能是一个问题,这可能是家庭作业......

所以试试睡眠排序

import java.util.ArrayList;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;

public class Final {

    private static int count = 10;

    public static void main(String[] arg)
    {
        ArrayList<Integer> randomNumber2 = new ArrayList<Integer>();
        Random rand = new Random();

        for (int i = 0; i < count; i++) {
            randomNumber2.add(new Integer(rand.nextInt(50)));
        }

        Timer timer = new Timer();
        for(final Integer i : randomNumber2) {
            timer.schedule(new TimerTask()
            {
                public void run()
                {
                    System.out.println(i);
                    --count;
                }
            }, i * 50L);
        }
        while(count > 0){ Thread.yield();}
        timer.cancel();
    }
}
于 2013-04-28T03:04:37.613 回答