如何对不断增长的数组列表进行排序?

How to sort a continually growing arraylist?

这是我目前拥有的代码,一切运行良好。 我感到困惑的是如何比较添加到 arraylist 的新项目?我在看比较器,但我认为它不适合这种情况?我可能是错的,但我似乎无法弄清楚这背后的逻辑。我原本打算手动完成,但后来意识到,这可能不是一个聪明的主意。我将如何创建插入排序算法?我打算使用顺序排序方法,但我觉得我错过了一些东西。任何人都可以解释一下吗?

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class lab06 {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String entry;
        boolean loop = true;

        List<Integer> list = new ArrayList<Integer>();
        System.out.println("Simple Sorting Program");
        System.out.println("");
        System.out.println("======================");
        System.out.println(""); 
        System.out.println("At start this list contains: "  + list);    
        System.out.println(""); 

        while(loop = true){

            System.out.print("Enter val (neg to end): ");
            entry = input.next();

            if (entry.charAt(0) !='-'){
                Integer val = Integer.valueOf(entry);
                list.add(val);
                System.out.println("List now contains: " + list);
            }
            else{
                loop = false;
                System.out.println("At end, list contains: "+ list);
                System.out.println("Goodbye!");                 
            }                   
        }
    }

如@MadProgrammer 所述,最好的方法是使用搜索算法,特别是二分搜索算法在 O(logN) 时相当有效,然后在上下文中插入数据值。

如果不需要使用列表,或者不需要使用元素条目号来引用您的条目,您可以考虑用来自 apache commons 的 TreeBag 替换您的列表。

这实现了 Collection 接口,并且在添加新值时将在内部维护元素的自然顺序(在本例中为整数)。它们将通过迭代器按顺序列出,并在打印内容时通过 toString() 方法隐式列出。

#include org.apache.commons.collections4.bag.TreeBag;

 ...

Collection<Integer> list = new TreeBag<Integer>();

 ...

要使用这个需要下载 commons-collections.jar 并在 运行 程序时将其包含在类路径中。