繁体   English   中英

在arraylist java中按升序对数字进行排序

[英]Sorting numbers in ascending order in arraylist java

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)));
        }
}

我创建了这个随机生成的arraylist,它生成数字1-50。 我想按升序对生成的数字进行排序。 如果不使用Collection.sort,我该如何使用ArrayList?

不仅仅是复制和粘贴代码,我们在这里考虑答案。 您有10个值,并且要按升序将它们添加到数组中。 如果您要真正做到这一点,您将如何组织它?

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

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

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

这没有我想要的那么有意义,但是我猜想这是针对实验室/ PA /硬件/类似的东西。 因此,希望您能接受我写的东西,理解它,并为此编写自己的代码。 这不是执行此操作的最有效方法,但它是一种易于理解的方法,几乎​​任何人都可以编写代码,非常适合进行简单的课堂作业。

干杯!

这是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]);
}

有很多很多的排序算法 ,但是听起来好像不是性能问题,这可能是作业...

因此,尝试睡眠排序

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();
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM