如何对不断增长的arraylist进行排序?

时间:2015-03-02 00:49:25

标签: java sorting arraylist sequential

这是我到目前为止的代码,一切运行正常。 我很困惑的是如何比较添加到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!");                 
            }                   
        }
    }

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

如果没有要求使用List,或者使用元素条目号引用您的条目,您可以考虑用apache commons中的TreeBag替换您的List。

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

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

 ...

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

 ...

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