在不使用' Collections.sort'排序ArrayList的情况下

时间:2016-12-21 14:22:26

标签: java sorting arraylist

我们必须创建一个ArrayList,只要用户想要它就会获取值,然后将它们按顺序排列。这类问题的其他问题通常使用Collections.sort作为解决方案,但我宁愿使用其他东西来更好地理解ArrayLists。

我的程序正在取值并打印出我预先添加到数组中的值,但是发生了一些非常奇怪的事情,它打印出用户输入的数字的重复数据,而不是按顺序排列。

import java.util.Scanner;
import java.util.ArrayList;

public class Orderedarraylist {

    static Scanner scan = new Scanner(System.in);

    public static void main(String[] args) {
        ArrayList<Integer> list = new ArrayList<Integer>();
        list.add(7);
        list.add(178);
        list.add(12);
        list.add(9);

        System.out.println("Enter any number.");
        int n = scan.nextInt();

        list.add(n);

        System.out.println("Enter any number.");
        int b = scan.nextInt();

        list.add(b);

        while ((n >= 0) && (b >= 0)) {
            System.out.println("Enter another number or press 2 to exit.");
            int x = scan.nextInt();
            if (x == 2) {
                break;
            }
            for (int i = 0; i < list.size() - 1; i++) {
                if (x > list.get(i)) {
                    list.add(x);
                } else {
                    i++;
                }
            }
        }
        //something is happening in here that prints multiples of the numbers. it doesn't print the first set of values that way
        //but it also doesn't print them in order.. 
        System.out.println("Here is your list: " + list);
    }
}

2 个答案:

答案 0 :(得分:1)

您不需要使用Collections.sort()&#39;这里。您只想维护订单,并list interface注意并删除else i++.如果x大于列表中的多个元素,那么您的代码会多次添加x,这就是您获得的原因在这里重复。

if (x == 2) break;

for (int i = 0; i < list.size() - 1; i++) {
    if (x > list.get(i)) {
        list.add(i, x);
        break;
    }
}

答案 1 :(得分:0)

您使用add(x)调用将所有数字添加到列表末尾。相反,您需要使用add(i,x)将其插入当前位置。

添加后,您需要突破循环。相反,您将重复添加到列表的末尾。

所以你想要:

if(x>list.get(i)) {
    list.add(i, x);
    break;
}