对象数组的插入排序?

时间:2014-05-01 13:15:25

标签: java arrays sorting

例如,我有以下类:

public class FooService {

    private String name;
    private int quantity;

    public FooService(String name, int quantity) {
        this.name = name;
        this.quantity = quantity;
    }
    // getters + setters
}

public class FooStorage {

    private FooService [] services = new FooService[10];

    public void add(FooService fooService) {

    }
}

我想根据每个元素的名称参数按字母顺序对服务数组进行排序。

我知道在这种情况下我可以使用比较器,但在导入大量数据时非常昂贵。任何人都可以帮我处理插入排序吗?

编辑:我不允许使用收藏集。另外,不要介意数组的固定大小。我最初分配5000个插槽,然后在我的程序中达到第5000个插槽时乘以2。

3 个答案:

答案 0 :(得分:3)

FooService实施Comparable。使compareTo方法按字母顺序进行比较。 然后使用Arrays.sort(services);它将对您的数组进行排序。

在此处阅读更多内容:http://docs.oracle.com/javase/6/docs/api/java/util/Arrays.html#sort(java.lang.Object[])

答案 1 :(得分:2)

如果您定期向阵列中添加大量新项目,那么@Jakkra所描述的Arrays.sort()方法是一种合理的方法。

如果您经常每次只添加一些项目,那么这种方法有点重,您可能需要考虑TreeSet(还需要实施Comparable)。< / p> 编辑:刚刚看到你的更新说你不能使用收藏品(!),所以第二个选项对你没有好处,但我会把它留在这里供后人使用。

答案 2 :(得分:0)

如果你真的热衷于插入排序试试这个..

public void sort(){
    for(int i=2;i<services.length;i++){
        int j=i-1;
        FooService key=services[i];
        while((j>-1)&& ((services[j].getName().compareTo(key.getName()))>0)){
            services[j+1]=services[j];
            j--;
        }
        services[j+1]=key;
    }
}

P.S。您没有使用集合... compareTo()只是帮助您进行字符串比较,实现您自己的字符串比较将重新发明轮子。